AvovA
|
cool russian dude
|
|
|
|
Рег.: 06.11.2002
|
Сообщений: 2425
|
Из: Toronto, Canada
|
Рейтинг: 447
|
|
как записать regexp паттерн
13.11.2007 01:48
|
|
|
Никак не могу записать нормально такой паттерн, постоянно контр-примеры вылазят, на которых он не работает. Как это можно сделать нормально ?
Ищется строка такого вида \s*(слово на русском языке) (разделитель из пробела или других символов типа -, :, - , с обоих сторон еще и пробелы могут быть)(слово на русском языке)( : (двоеточие), возможно окруженное пробелами, может просто пробелы без : )(цифра, а потом все что угодно)
|
пишите письма  |
|
Krasin
|
|
|
|
|
Рег.: 23.06.2004
|
Сообщений: 7039
|
Из: Калифорния
|
Рейтинг: 3386
|
|
Re: как зависать regexp паттерн
[re: AvovA]
13.11.2007 01:54
|
|
|
Возможно
code: \s*[абвгдеежзийклмнопрстуфхцчшщъыьэюя]+\s*[\-:-]\s*[абвгдеежзийклмнопрстуфхцчшщъыьэюя]+\s*[:]?\s*\d.*
вместо перечисления русского алфавита можно сделать через указание интервалов кодов в юникоде, но мне лень искать какие там коды. Плюс, в этом примере надо запускать с флагом CaseInsensitive
и посмотри - работает ли движок, который ты используешь на
code: ля-ля 5
если нет, то самое простое - сделать два регекспа. Один на случай, если двоеточие перед цифрой есть, второй - если нет
|
|
AvovA
|
cool russian dude
|
|
|
|
Рег.: 06.11.2002
|
Сообщений: 2425
|
Из: Toronto, Canada
|
Рейтинг: 447
|
|
Re: как зависать regexp паттерн
[re: Krasin]
13.11.2007 02:06
|
|
|
Quote:
[:]?
А почему не просто :?
|
пишите письма  |
|
alepar
|
|
|
|
|
Рег.: 18.02.2004
|
Сообщений: 9216
|
|
Рейтинг: 3643
|
|
Re: как зависать regexp паттерн
[re: AvovA]
13.11.2007 02:17
|
|
|
полагаю, что
Quote:
( : (двоеточие), возможно окруженное пробелами, может просто пробелы без : )
|
Whatever you do in life will be insignificant, but it's very important that you do it. |
|
botWi
|
|
|
|
|
Рег.: 22.11.2003
|
Сообщений: 10160
|
Из: Moscow
|
Рейтинг: 1764
|
|
Re: как записать regexp паттерн
[re: AvovA]
13.11.2007 10:53
|
|
|
у меня обычно работают русские буквы так: а-яе \s можно включать в [] вот эта фраза не совсем ясна:
В ответ на:
разделитель из пробела или других символов типа -, :, - , с обоих сторон еще и пробелы могут быть
имеется ввиду вперемежку пробелы и знаки? или если несоклько знаков то пробелы между ними нельзя? короче, вот это нормально? " :- :- " или должно быть только " :-:- "?
code:
\s*[А-Яа-яЕе]+[\s-:-]*[А-Яа-яЕе]+\s*:?\s*\d.*
почему [:]? я кстати тоже не понял что ответил alepar тем более не понял
|
Хватит дрочить на рейтинги |
|
chunky_bacon
|
chunky_bacon
|
|
|
|
Рег.: 08.10.2006
|
Сообщений: 1996
|
|
Рейтинг: 820
|
|
Re: как записать regexp паттерн
[re: botWi]
13.11.2007 11:10
|
|
|
Либо alepar ответил правильно на вопрос 'А почему не просто :?', либо вопрос 'А почему не просто :??' был сформулирован грамматически неверно - без вопросительного знака в конце. 
Кстати, тоже не понял, зачем писать [:]?, если можно написать :?.
|
|
Forest
|
Carpal Tunnel
|
|
|
|
Рег.: 29.08.2002
|
Сообщений: 11597
|
|
Рейтинг: 795
|
|
Re: как записать regexp паттерн
[re: AvovA]
13.11.2007 11:17
|
|
|
Есть такая прога - RegexBuddy . Там есть такая прикольная штука как отображение регэкспов в токенах. Еще не понял, насколько это полезно, но вполне может помочь лучше разобраться в регэкспе.
|
|
botWi
|
|
|
|
|
Рег.: 22.11.2003
|
Сообщений: 10160
|
Из: Moscow
|
Рейтинг: 1764
|
|
Re: как записать regexp паттерн
[re: Forest]
13.11.2007 11:18
|
|
|
+1
тоже ею пользуюсь  правда редко, обычно сходу пишу
|
Хватит дрочить на рейтинги |
|
Forest
|
Carpal Tunnel
|
|
|
|
Рег.: 29.08.2002
|
Сообщений: 11597
|
|
Рейтинг: 795
|
|
Re: как записать regexp паттерн
[re: botWi]
13.11.2007 11:23
|
|
|
Для языков, у которых не предусмотрено создание библиотек регэкспов (тот же .нет), такие библиотеки можно делать в этот проге (вроде там это можно делать, там есть встроенная библиотека, только начал с ней разбираться)
|
|
penartur2
|
|
|
|
|
Рег.: 16.06.2005
|
Сообщений: 54495
|
|
Рейтинг: 429
|
|
|
В ответ на:
Кстати, тоже не понял, зачем писать [:]?, если можно написать :?.
+1. Только, вроде бы, все-таки \:?
|
Я ушел на новый форум. Там правовое государство. А еще можно удобно листать аплоад  |
|
chunky_bacon
|
chunky_bacon
|
|
|
|
Рег.: 08.10.2006
|
Сообщений: 1996
|
|
Рейтинг: 820
|
|
|
У меня работает :?. Python, модуль re.
|
|
botWi
|
|
|
|
|
Рег.: 22.11.2003
|
Сообщений: 10160
|
Из: Moscow
|
Рейтинг: 1764
|
|
|
В ответ на:
\:?
в регэкспах экранируются "команды" : - это какая команда?
|
Хватит дрочить на рейтинги |
|
penartur2
|
|
|
|
|
Рег.: 16.06.2005
|
Сообщений: 54495
|
|
Рейтинг: 429
|
|
Re: как записать regexp паттерн
[re: botWi]
13.11.2007 13:25
|
|
|
В ответ на:
The fact that plain parentheses fulfil two functions is not always helpful. There are often times when a grouping subpattern is required without a capturing requirement. If an opening parenthesis is followed by "?:", the subpattern does not do any capturing, and is not counted when computing the number of any subsequent capturing subpatterns. For example, if the string "the white queen" is matched against the pattern the ((?:red|white) (king|queen)) the captured substrings are "white queen" and "queen", and are numbered 1 and 2. The maximum number of captured substrings is 99, and the maximum number of all subpatterns, both capturing and non-capturing, is 200.
As a convenient shorthand, if any option settings are required at the start of a non-capturing subpattern, the option letters may appear between the "?" and the ":".
Т.е., у двоеточия есть и специальное значение. Так что, лучше, во избежание неприятностей, все-таки заэкранировать.
|
Я ушел на новый форум. Там правовое государство. А еще можно удобно листать аплоад  |
|
penartur2
|
|
|
|
|
Рег.: 16.06.2005
|
Сообщений: 54495
|
|
Рейтинг: 429
|
|
|
Например. Ты что, экономишь на бэкслэшах?
|
Я ушел на новый форум. Там правовое государство. А еще можно удобно листать аплоад  |
|
botWi
|
|
|
|
|
Рег.: 22.11.2003
|
Сообщений: 10160
|
Из: Moscow
|
Рейтинг: 1764
|
|
|
В ответ на:
Ты что, экономишь на бэкслэшах?
они ухудшают читаемость
|
Хватит дрочить на рейтинги |
|
penartur2
|
|
|
|
|
Рег.: 16.06.2005
|
Сообщений: 54495
|
|
Рейтинг: 429
|
|
Re: как записать regexp паттерн
[re: botWi]
13.11.2007 13:34
|
|
|
Наоборот. Если видишь \: - то сразу понятно, тут имеется в виду именно символ ":". А если видишь : - то имеется в виду что угодно, вплоть до того, что автор регэкспа мог забыть написать ? после скобки. (a?i:qwe) - вот что он имел в виду, почему его функция (в которой этот регэксп) возвращает неправильный ответ? А если (a?i\:qwe) - то все понятно, никаких вариантов.
|
Я ушел на новый форум. Там правовое государство. А еще можно удобно листать аплоад  |
|
penartur2
|
|
|
|
|
Рег.: 16.06.2005
|
Сообщений: 54495
|
|
Рейтинг: 429
|
|
|
Тогда уж не букву P, а угловые скобки. Которые, кстати, еще и в assertions используются.
|
Я ушел на новый форум. Там правовое государство. А еще можно удобно листать аплоад  |
|
penartur2
|
|
|
|
|
Рег.: 16.06.2005
|
Сообщений: 54495
|
|
Рейтинг: 429
|
|
|
В ответ на:
Не вижу смысла писать их куда попало.
А еще я, например, всегда, если хочу написать в строке бэкслеш (пусть даже это php-шная строка в одиночных кавычках) - экранирую его, вне зависимости от того, что там написано после этого бэкслеша. Это плохо?
|
Я ушел на новый форум. Там правовое государство. А еще можно удобно листать аплоад  |
|
penartur2
|
|
|
|
|
Рег.: 16.06.2005
|
Сообщений: 54495
|
|
Рейтинг: 429
|
|
|
Для альтернативно одаренных - представь, что тебе надо разбираться в чужой функции. Она почему-то возвращает неверный результат. В ней - вот такой регэксп. Если ':' экранирована - то сразу понятно, что имелось в виду. А если не экранирована - то остается простор аж для трех опечаток. Конечно, если тебе насрать, насколько читаем твой код, и насрать на тех, кто будет в нем разбираться - твое дело. Я рад, что я не работаю с тобой.
|
Я ушел на новый форум. Там правовое государство. А еще можно удобно листать аплоад  |
|
burivuh
|
Carpal Tunnel
|
|
|
|
Рег.: 08.08.2004
|
Сообщений: 4452
|
|
Рейтинг: 1567
|
|
|
Жжошь плазмой! 
|
Послушай, иногда мужчинам... нужно уважение иметь лицо (с) Безымянный переводчик |
|