Регулярные выражения на все случаи жизни

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 346
Благодарностей
910
Баллы
113

Netson

Client
Регистрация
17.09.2012
Сообщения
3
Благодарностей
1
Баллы
3
Коллеги, подскажите, как расставить пробелы до и после имён.

13JOHN45
345ALBERT234
4312WANESSA1
5MIKE22
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 416
Благодарностей
9 120
Баллы
113

Вложения

  • Спасибо
Реакции: udder и Netson

Netson

Client
Регистрация
17.09.2012
Сообщения
3
Благодарностей
1
Баллы
3
  • Спасибо
Реакции: Sergodjan

Wide

Client
Регистрация
04.02.2013
Сообщения
945
Благодарностей
257
Баллы
63
Помогите плз регулярку на размеры составить. 80x29.3x22.6 см/мм разделитель может быть точка или запятая или не быть вовсе, см/мм может быть с точкой а также слитно. x признак должен быть обязательно, иначе это размер. Регистр см/мм может быть разным.
80x29.3x22.6 см.
80x29.3x22.6 см
80x29.3x22.6см.
80x29.3x22.6см
80x29,3x22,6 см.
80x29,3x22,6 см
80x29,3x22,6см.
80x29,3x22,6см
80x293x226 см.
80x293x226 см
80x293x226см.
80x293x226см
80x29.3x22.6 мм.
80x29.3x22.6 мм
80x29.3x22.6мм.
80x29.3x22.6мм
80x29,3x22,6 мм.
80x29,3x22,6 мм
80x29,3x22,6мм.
80x29,3x22,6мм
80x293x226 мм.
80x293x226 мм
80x293x226мм.
80x293x226мм
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 416
Благодарностей
9 120
Баллы
113
Помогите плз регулярку на размеры составить. 80x29.3x22.6 см/мм разделитель может быть точка или запятая или не быть вовсе, см/мм может быть с точкой а также слитно. x признак должен быть обязательно, иначе это размер. Регистр см/мм может быть разным.
80x29.3x22.6 см.
80x29.3x22.6 см
80x29.3x22.6см.
80x29.3x22.6см
80x29,3x22,6 см.
80x29,3x22,6 см
80x29,3x22,6см.
80x29,3x22,6см
80x293x226 см.
80x293x226 см
80x293x226см.
80x293x226см
80x29.3x22.6 мм.
80x29.3x22.6 мм
80x29.3x22.6мм.
80x29.3x22.6мм
80x29,3x22,6 мм.
80x29,3x22,6 мм
80x29,3x22,6мм.
80x29,3x22,6мм
80x293x226 мм.
80x293x226 мм
80x293x226мм.
80x293x226мм
Можете попробовать такой вариант регулярки: \d+(,|\.|)(\d+|)x\d+(,|\.|)(\d+|)x\d+(,|\.|)(\d+|)(\s+|)(см|мм)(\.|)

85269
 
  • Спасибо
Реакции: Wide

Swanskey

Client
Регистрация
24.06.2018
Сообщения
70
Благодарностей
29
Баллы
18

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 416
Благодарностей
9 120
Баллы
113
Посмотреть вложение 85707

Как удалить все, кроме указанных?
Через отрицающее рег-выражение https://zennolab.com/discussion/threads/ochistit-kesh-krome-nesk-domenov.97717/#post-652674

Если не получится первым вариантом, то попробуйте решать эту задачу через экспорт/импорт кук по регулярному выражению. То есть, делаете экспорт по обычной регулярке с перебором вариантов (domain1.com)|(domain2.com), затем чистите все куки и делаете импорт. В этом случае отрицающая регулярка не потребуется.
 

udder

Client
Регистрация
28.03.2017
Сообщения
618
Благодарностей
128
Баллы
43
как обработать переменную, в которой содержатся цифры с новой строки
1
2
3
4
Чтобы ПОСЛЕ КАЖДОЙ СТРОКИ добавить нужный текст?
ПЕРЕД цифрой я делаю так
88451

и вот как после цифры дописать нужный текст я не знаю
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 416
Благодарностей
9 120
Баллы
113
как обработать переменную, в которой содержатся цифры с новой строки
1
2
3
4
Чтобы ПОСЛЕ КАЖДОЙ СТРОКИ добавить нужный текст?
ПЕРЕД цифрой я делаю так
Посмотреть вложение 88451
и вот как после цифры дописать нужный текст я не знаю
Точно также, просто добавлять после $1.
 
  • Спасибо
Реакции: udder

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
745
Баллы
113
Может пригодиться кому-нибудь,я тут отчайся, траф упал до 20к, и короче рекламу снял, подрядился за 1к сутки, автосервис охранять, с 8 до восьми, но и короче ноут с собой приношу, сожусь в бутке и до утра читаю, и вот читал там, даже если 50 страниц прочитать, уже можно много узнать, сейчас пм купил, отдельно, буду там руку набивать, до лета)
 

Вложения

udder

Client
Регистрация
28.03.2017
Сообщения
618
Благодарностей
128
Баллы
43
Есть замечательная регулярка, которая очищает текст от более одного пробела [\s]{2,} замена на одиночный пробел
88537


Интересует как из текста удалить более одной точки идущей подряд и так же с запятыми сделать?
В чате зеннолаба телеграм @Gunjubasik дал интересный вариант
Хорошо отшлифовал свой текст :-) Я доволен.
C#:
project.Variables["Result"].Value = Macros.TextProcessing.Replace(project.Variables["Text"].Value.Trim(), @"[\W]{2,}", ". ", "Regex", "All");

project.Variables["Result"].Value = project.Variables["Result"].Value.Trim();
 
Последнее редактирование:
  • Спасибо
Реакции: baracuda

zenomask

Client
Регистрация
06.09.2015
Сообщения
47
Благодарностей
11
Баллы
8
Код:
// Удалить после «:»

echo preg_replace("/^(.+?):.+$/", '\\1', $text);

// Удалить после «-»

echo preg_replace("/^(.+?)-.+$/", '\\1', $text);

[\.\-_A-Za-z0-9]+?@[\.\-A-Za-z0-9]+?[\.A-Za-z0-9]{2,} - найдет все email;

(\d{1,3}\.){3}\d{1,3}:\d{1,5} - получить айпи и порт;

(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])? – получит урлы сайтов.

ICQ:

([1-9])+(?:-?\d){4,}

Набор из букв и цифр (латиница):

^[a-zA-Z0-9]+$

Набор из букв и цифр (латиница + кириллица):

^[а-яА-ЯёЁa-zA-Z0-9]+$

Домен (например abcd.com):

^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$

IPv4: (подкорректировано runcore)

((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)

IPv6:

((^|:-)([0-9a-fA-F]{0,4})){1,8}$

Имя пользователя (с ограничением 2-20 символов, которыми могут быть буквы и цифры, первый символ обязательно буква):

^[a-zA-Z][a-zA-Z0-9-_\.]{1,20}$

Пароль (Строчные и прописные латинские буквы, цифры):

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s).*$

Пароль (Строчные и прописные латинские буквы, цифры, спецсимволы. Минимум 8 символов):

(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$

Дата в формате YYYY-MM-DD:

[0-9]{4}-(0[1-9]|1[012])-(0[1-9]|1[0-9]|2[0-9]|3[01])

UPD. Более строгая проверка, предложенная runcore:

(19|20)\d\d-((0[1-9]|1[012])-(0[1-9]|[12]\d)|(0[13-9]|1[012])-30|(0[13578]|1[02])-31)

Дата в формате DD/MM/YYYY:

(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d

Целые числа и числа с плавающей точкой (разделитель точка):

\-?\d+(\.\d{0,})?

UUID:

^[0-9A-Fa-f]{8}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{12}$

Широта или долгота:

-?\d{1,3}\.\d+
 
Последнее редактирование модератором:
  • Спасибо
Реакции: udder

Uralbox

Client
Регистрация
04.02.2019
Сообщения
40
Благодарностей
0
Баллы
6
Подскажите как десятитысячные числа сделать через пробел.
Например в переменной num число 90800, нужно привести к виду 90 800?
 

BenLinus

Client
Регистрация
29.04.2016
Сообщения
39
Благодарностей
6
Баллы
8
Здравствуйте. Помогите пожалуйста разобраться с регулярками.
Я пытаюсь составить две регулярки для субтитров. Первая должна выдергивать таймкод начала предложения, а вторая конец предложения. Замечу, что именно предложение, не строку.
Вот первая, вроде она работает, может у вас будут по ней корректировки.
(?<=\W).*(?=\ --> \d+:\d+:\d+,\d+\s+\b[A-Z].*?\b)
А вторая регулярка для окончания предложения.
(?<=\ -->\ ).*(?=\D+\.|\$)
И вот она странно работает, к примеру в самом первом предложении не выделяется конечный таймкод.
Пример субтитров над которыми тестировал регулярки.

Код:
1
00:00:07,200 --> 00:00:10,880
Hi, I'm Paula Sánchez-Ferrero
and I'm a 3D artist for video games.

2
00:00:12,640 --> 00:00:16,800
Throughout my career,
I've done more than nine AAA projects,

3
00:00:16,800 --> 00:00:18,360
including "Metro Exodus,"

4
00:00:18,360 --> 00:00:21,720
"Call of Duty: WWII"
and "Overkill's The Walking Dead."

5
00:00:21,720 --> 00:00:25,920
I work as Supervising Environment
and Prop Artist at elite3D,

6
00:00:25,920 --> 00:00:27,960
a video game outsourcing company.

7
00:00:29,400 --> 00:00:32,720
From a young age, video games
were very present in my life,

8
00:00:32,720 --> 00:00:35,880
I really enjoyed drawing
and writing my own stories.

9
00:00:35,880 --> 00:00:38,240
I'm passionate about
all the hidden stories

10
00:00:38,240 --> 00:00:40,560
behind the textures
of the props and assets,

11
00:00:40,560 --> 00:00:44,560
the objects used to decorate
the game's scenes or world.

12
00:00:44,560 --> 00:00:47,720
Everything has a story,
even if it's an inanimate object.

13
00:00:48,800 --> 00:00:51,280
In this course,
you'll find out

14
00:00:51,280 --> 00:00:54,280
what creating props and other video game
objects consists of.

15
00:00:54,280 --> 00:00:57,560
Plus, how to make them
professional quality.

16
00:00:58,160 --> 00:01:00,080
As a project, we'll model a prop

17
00:01:00,080 --> 00:01:02,280
that could be in any video game.

18
00:01:03,000 --> 00:01:05,920
To do this, I'll share
sources of inspiration with you

19
00:01:05,920 --> 00:01:07,920
that marked the beginning of my career.

20
00:01:07,920 --> 00:01:10,880
After, we'll learn the phases
or the pipeline to follow

21
00:01:10,880 --> 00:01:12,720
for developing our asset.

22
00:01:12,720 --> 00:01:16,320
We'll find out how to configure
our software and scripts

23
00:01:16,320 --> 00:01:18,040
to save time working.

24
00:01:18,040 --> 00:01:21,000
We'll also look at
the importance of having good references

25
00:01:21,000 --> 00:01:22,600
before we start modeling.

26
00:01:23,040 --> 00:01:25,840
With this knowledge, we'll get typing

27
00:01:25,840 --> 00:01:27,800
to start modeling our asset.

28
00:01:28,600 --> 00:01:32,160
First we'll do the block out
to figure out the prop's dimensions

29
00:01:32,160 --> 00:01:35,080
and get an idea of the pieces
that we'll need

30
00:01:35,080 --> 00:01:37,040
to estimate how long this will take us.

31
00:01:37,040 --> 00:01:40,440
Then, the high poly phase,
first with the Sub-D elements,

32
00:01:40,440 --> 00:01:43,600
with containment and support loops
in the more complex pieces.

33
00:01:43,600 --> 00:01:47,200
Later, with Zbrush, we'll look at
how to weld high poly pieces

34
00:01:47,200 --> 00:01:51,040
and finally, we'll give our asset
details with floaters and screws.

35
00:01:51,680 --> 00:01:55,440
Then, the low phase
to reduce the poly of our high poly

36
00:01:55,440 --> 00:01:59,600
followed by UV mapping
and bakes to project detail.

37
00:01:59,960 --> 00:02:03,040
We'll work with the substance painter
to texturize,

38
00:02:03,040 --> 00:02:06,720
we'll create our base materials
to give them history and realism.

39
00:02:07,480 --> 00:02:09,400
With our finished asset,

40
00:02:09,400 --> 00:02:12,920
we'll see the steps to integrate it
into our game motor.

41
00:02:12,920 --> 00:02:15,520
Lastly, we'll illuminate
our asset in Marmoset

42
00:02:15,520 --> 00:02:19,840
and we'll retouch it in Photoshop
before posting it on social media.

43
00:02:19,840 --> 00:02:22,120
After the course,
you'll have a complete model

44
00:02:22,120 --> 00:02:24,840
with realistic textures
to use in video games.

45
00:02:26,320 --> 00:02:29,440
For this course,
you should have a basic knowledge

46
00:02:29,440 --> 00:02:32,040
of hard surface or poly modeling.

47
00:02:32,040 --> 00:02:36,040
Plus, familiarity with
3ds Max would be very helpful,

48
00:02:36,040 --> 00:02:39,840
however, if you know a different one,
you can follow the course's content.

49
00:02:40,240 --> 00:02:43,600
You'll need a computer with 3ds Max
or similar for modeling

50
00:02:43,600 --> 00:02:47,120
and Photoshop CS6 or higher
for final retouches on the object.

51
00:02:48,000 --> 00:02:49,320
Create assets from scratch

52
00:02:49,320 --> 00:02:52,160
and do modeling projects
on a professional level.
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 416
Благодарностей
9 120
Баллы
113
Подскажите как десятитысячные числа сделать через пробел.
Например в переменной num число 90800, нужно привести к виду 90 800?
Переформатировать последовательность можно с помощью такого снипета C#:
C#:
var number = Convert.ToInt32(project.Variables["in"].Value);
string fmt = "00 000";
return number.ToString(fmt);
88961
 

udder

Client
Регистрация
28.03.2017
Сообщения
618
Благодарностей
128
Баллы
43
есть регулярка [^\\]+$ которая оставляет все что после последнего слеша
ПРИМЕР
g:\мой диск\backup\Zenno\file.sql
Регулярка оставит только file.sql, а как переделать, чтобы оставляло все что перед последним слешем:
ВОТ ТАК g:\мой диск\backup\Zenno\
РЕШЕНИЕ

РАЗ

.*\\

ДВА

^(.*[\\\/])

ТРИ C#
return Path.GetDirectoryName(project.Variables["folder"].Value);

Помогли в чате ZennoLab
 
Последнее редактирование:
  • Спасибо
Реакции: Sergodjan

Biobalans

Client
Регистрация
28.02.2021
Сообщения
75
Благодарностей
4
Баллы
8
Подскажите, нашёл такой пример:
Извлечение имени и расширения файла из пути
(?<=\\)[^\.\\]*(\.[^\.]+){1,}$

А мне нужно, чтобы имя файла извлекалось без его расширения! Расширение моего файла .tar.gz

У меня разделитель это точка, что делать? С точками не хочет работать. Я пытаюсь таким образом имя файла извлечь в переменную, но действие не происходит

89595


У меня разделитель это точка, что делать? С точками не хочет работать. Я пытаюсь таким образом имя файла извлечь в переменную, но действие не происходит

1647468391229.png
ВСЁ, тут я просто не указал номера
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 416
Благодарностей
9 120
Баллы
113
А мне нужно, чтобы имя файла извлекалось без его расширения! Расширение моего файла .tar.gz
Еще можете попробовать работать с такой регуляркой: .*?(?=\.) через кубик Обработка текста - Regex (первое совпадение).

89598
 
  • Спасибо
Реакции: Biobalans

Biobalans

Client
Регистрация
28.02.2021
Сообщения
75
Благодарностей
4
Баллы
8
Еще можете попробовать работать с такой регуляркой: .*?(?=\.) через кубик Обработка текста - Regex (первое совпадение).

Посмотреть вложение 89598
Спасибо. А можно универсальную регулярку, которая будет извлекать только имя файла, где бы он ни находился? Найденый пример регулярки позволяет извлечь его только вместе с расширением из пути D:\BGram\1\free\10.198.tar.gz , а приведённый Вами - обрабатывает уже полученный результат.
Файл 10.198.tar.gz может находиться в любой поддиректории "D:\BGram\", и мне его имя "10.198" нужно извлекать всегда, где бы он ни был. И желательно "10" и 198 в разные переменные.
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 416
Благодарностей
9 120
Баллы
113
Спасибо. А можно универсальную регулярку, которая будет извлекать только имя файла, где бы он ни находился? Найденый пример регулярки позволяет извлечь его только вместе с расширением из пути D:\BGram\1\free\10.198.tar.gz , а приведённый Вами - обрабатывает уже полученный результат.
Файл 10.198.tar.gz может находиться в любой поддиректории "D:\BGram\", и мне его имя "10.198" нужно извлекать всегда, где бы он ни был. И желательно "10" и 198 в разные переменные.
Например, из полного пути вот такой можно извлечь: ([^\\]+(?=\.tar.gz))

89603


Впрочем, она работает как раз и как универсальная:

89604


А результат 10.198 уже через Split можно разложить по переменным или тоже через регулярку, но за два шага.
Первый шаг: .*?(?=\.), второй шаг (?<=\.).*
 
Последнее редактирование:
  • Спасибо
Реакции: Biobalans

Hannes

Client
Регистрация
03.02.2016
Сообщения
527
Благодарностей
273
Баллы
63
Здравствуйте! Помогите, пожалуйста, составить регулярку.

Нужно в url заменить двойной слеш "//" на один не затрагивая при этом "https://"

Т.е в ссылке
C#:
https://www.site.com/123//
нужно сделать так:
C#:
https://www.site.com/123/
На кубиках придумал как это сделать, но излишне сложно получается(
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 416
Благодарностей
9 120
Баллы
113
Здравствуйте! Помогите, пожалуйста, составить регулярку.

Нужно в url заменить двойной слеш "//" на один не затрагивая при этом "https://"

Т.е в ссылке
C#:
https://www.site.com/123//
нужно сделать так:
C#:
https://www.site.com/123/
На кубиках придумал как это сделать, но излишне сложно получается(
Если двойной слеш только в конце, то так можно:

90121
 
  • Спасибо
Реакции: Hannes

Hannes

Client
Регистрация
03.02.2016
Сообщения
527
Благодарностей
273
Баллы
63
Спасибо, но в данном случае не подходит.
Мне нужно удалить лишний слеш только если он есть, способ выше повредит "https://"

Есть такой способ:
  1. заменить // на пустоту
  2. заменить https: на https://

Но надеялся одной регуляркой решить.
 
Последнее редактирование:
  • Спасибо
Реакции: Sergodjan

Jorka

Client
Регистрация
28.10.2019
Сообщения
33
Благодарностей
1
Баллы
8
Здравствуйте, подскажите пожалуйста как составить регулярку?

Формат:

check>text>sample>1
check>text>sample>2
check>text>example>1
check>text>sample>3
check>text>test>4

Нужно найти все элементы содержащие одинаковую информацию между вторым и третьим ">" (в данном случае слово sample), и удалить все строки кроме одной.

Чтобы осталось например:

check>text>sample>2
check>text>example>1
check>text>test>4
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113
Здравствуйте, подскажите пожалуйста как составить регулярку?

Формат:

check>text>sample>1
check>text>sample>2
check>text>example>1
check>text>sample>3
check>text>test>4

Нужно найти все элементы содержащие одинаковую информацию между вторым и третьим ">" (в данном случае слово sample), и удалить все строки кроме одной.

Чтобы осталось например:

check>text>sample>2
check>text>example>1
check>text>test>4
В конструкторе составь. Только вместо числа вручную пропиши /d+ и проверь
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 416
Благодарностей
9 120
Баллы
113
Здравствуйте, подскажите пожалуйста как составить регулярку?

Формат:

check>text>sample>1
check>text>sample>2
check>text>example>1
check>text>sample>3
check>text>test>4

Нужно найти все элементы содержащие одинаковую информацию между вторым и третьим ">" (в данном случае слово sample), и удалить все строки кроме одной.

Чтобы осталось например:

check>text>sample>2
check>text>example>1
check>text>test>4
Приложил пример шаблона, как вариант.
Примененный в нем метод решения правда не на регулярках основан.
Результат его работы такой:

90172
 

Вложения

udder

Client
Регистрация
28.03.2017
Сообщения
618
Благодарностей
128
Баллы
43
Переменная с текстом
Нужно удалить все после первого переноса, оставить только первую строку с пятеркой. Как сделать?
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 416
Благодарностей
9 120
Баллы
113
Переменная с текстом

Нужно удалить все после первого переноса, оставить только первую строку с пятеркой. Как сделать?
"Обработка текста - Regex" по регулярке .+ (взять первое (нулевое) совпадение).

90827
 
  • Спасибо
Реакции: udder

Peplos

Client
Регистрация
31.07.2018
Сообщения
28
Благодарностей
6
Баллы
3
Подскажите пожалуйста, как немного доработать регулярку.
На странице есть список адресов вида example@mail\.com и вот такие со звездочкой example1@mail\.com\n \* .
Беру DOM, из него начинаю выбирать мыла регуляркой
\b[a-zA-Z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}\b
при этом мыла парсятся в виде [email protected], [email protected] и тд. Как изменить регулярку, чтобы она на выходе отдавала почты с этой звездочкой \n \*, если она есть у мыла?
 

Вложения

  • 149,8 КБ Просмотры: 132

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)