Форум: "Потрепаться";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];
Вниз
Кто-нибудь один... не надо много Найти похожие ветки
← →
Knight (2003-10-03 16:54) [0]Расшифруйте такое регулярное выражение:
"/[^(\w)|(\x7F-\xFF)|(\s)]/"
Только медленно и по символам... что для чего, для примера :)
← →
Knight (2003-10-03 17:03) [1]Up
← →
Карлсон (2003-10-03 17:07) [2]2 Knight © (03.10.03 16:54)
просвятите плиз, что это за набор символов такой?
← →
Е-Моё имя (2003-10-03 17:08) [3]
Regular expressions are characters that customize a search string. The product recognizes these regular expressions:
Character Description
^ A circumflex at the start of the string matches the start of a line.
$ A dollar sign at the end of the expression matches the end of a line.
. A period matches any character.
* An asterisk after a string matches any number of occurrences of that string followed by any characters, including zero characters. For example, bo* matches bot, bo and boo but not b.
+ A plus sign after a string matches any number of occurrences of that string followed by any characters except zero characters. For example, bo+ matches boo, and booo, but not bo or be.
[ ] Characters in brackets match any one character that appears in the brackets, but no others. For example [bot] matches b, o, or t.
[^] A circumflex at the start of the string in brackets means NOT. Hence, [^bot] matches any characters except b, o, or t.
[-] A hyphen within the brackets signifies a range of characters. For example, [b-o] matches any character from b through o.
{ } Braces group characters or expressions. Groups can be nested, with a maximum number of 10 groups in a single pattern. For the Replace operation, the groups are referred to by a backslash and a number according to the position in the “Text to find” expression, beginning with 0. For example, given the text to find and replacement strings, Find: {[0-9]}{[a-c]*}, Replace: NUM\1, the string 3abcabc is changed to NUMabcabc.
\ A backslash before a wildcard character tells the Code editor to treat that character literally, not as a wildcard. For example, \^ matches ^ and does not look for the start of a line.
вот и расшифровывай =)
← →
Knight (2003-10-03 17:11) [4]>> Карлсон © (03.10.03 17:07) [2]
Регулярные выражения лежат в основе всех современных технологий поиска по шаблону. Регулярное выражение представляет собой последовательность простых и служебных символов, описывающих искомый текст. Иногда регулярные выражения бывают простыми и понятными (например, слово dog), но часто в них присутствуют служебные символы, обладающие особым смыслом в синтаксисе регулярных выражений...
← →
Knight (2003-10-03 17:12) [5]>> Е-Моё имя © (03.10.03 17:08) [3]
Это и у меня есть... даже по-русски, только вот "особый смысл" , как-то за кадром остался... %)
← →
Knight (2003-10-03 17:24) [6]"/[^(\w)|(\x7F-\xFF)|(\s)]/"
Вот что понял:
[^ ]- NOT всего, что в скобках
(\w) - цифры, латинский алфавит
(\x7F-\xFF) - не нашёл, но скорее всего буквы русского алфавита
| = OR
что есть \s и слэши /
И как это всё работает? Применяется ко всем символам в строке?
← →
han_malign (2003-10-03 17:42) [7]>Е-Моё имя © (03.10.03 17:08) [3]
- какое отношение имеют регулярные выражения борландового поисковика к регулярным выражениям aw(Perl)???
>Knight ©
- небольшая ошибочка (\x7F-\xFF) - не буквы русского алфавита - у них диапазон поменьше - просто все символы расширенного алфавита.
/ - "скобки" регулярного выражения в aw/Perl
\s - space(помоему, если по логике(\t-tab,\n-new str(CRLF)))
← →
NAlexey (2003-10-03 17:43) [8]4.2.1 Синтаксис регулярных выражений
Регулярное выражение (или РВ) определяет множество строк сопоставимых с ним; задача этого модуля -- дать Вам возможность проверки соответствует ли конкретная строка заданному регулярному выражению (или соответствует ли заданное регулярное выражение конкретной строке, что означает одно и то же).
Регулярные выражения можно конкатенировать в новые формы; если A и B оба являются регулярными выражениями, то AB -- также регулярное выражение. Если строка p сочетается с A, а строка q сопоставима с B, то строка pq будет сочетаться с AB. Таким образом, можно конструировать сложные выражения из более простых примитивов, как описано выше. Для более детального ознакомления с теорией и реализацией регулярных выражений, смотрите нижеуказанную книгу Friedl, или почти любую книгу о создании компиляторов.
Ниже дается краткое описание формата регулярных выражений.
Регулярные выражения могут содержать как специальные, так и обычные символы. Большинство обычных символов, подобных "A", "a", или "0", являются самыми простыми регулярными выражениями; они просто сопоставляются с самими собой. Вы можете конкатенировать обычные символы, так, last сочетается со строкой "last". (В оставшейся части данного раздела мы будем писать РВ в этом особом стиле, обычно без кавычек, а сопоставляемые строки, "в одинарных кавычках".)
Некоторые символы, подобно "|" или "(", являются специальными. Специальные символы либо представляют классы обычных символов, либо влияют на то, как интерпретируется регулярное выражение по обе стороны от них.
Специальные символы:
"."
(Точка.) В режиме по умолчанию, сопоставляется с любым символом кроме символа новой строки. Если был определен флаг DOTALL, то сопоставляется с любым символом, включая символ новой строки.
"^"
(Керэт.) Сопоставляется с началом строки, а в режиме MULTILINE, также сопоставляется непосредственно после каждого символа новой строки.
"$"
Сопоставляется с концом строки, а в режиме MULTILINE, также сопоставляется непосредственно перед каждым символом новой строки. foo согласуется как с "foo", так и "foobar", в то время как регулярное выражение foo$ сопоставляется только с "foo".
"*"
Заставляет результирующее РВ соответствовать 0 или более повторениям предшествующего РВ, столько раз, сколько возможно. ab* будет сопоставляться с "a", "ab", или "a", с любым количеством последующих "b".
"+"
Заставляет результирующее РВ соответствовать 1 или более повторениям предшествующего РВ. ab+ будет сопоставляться с "a", за которым следует любое ненулевое количество "b"; но не будет сопоставляться просто с "a".
"?"
Заставляет результирующее РВ соответствовать 0 или 1 повторению предшествующего РВ. ab? будет сопоставляться как с "a", так и с "ab".
*?, +?, ??
Классификаторы "*", "+", и "?" очень жадные; они сопоставляются с таким количеством текста, насколько возможно. Иногда такое поведение нежелательно; при сопоставлении РВ <.*> с "<H1>title</H1>", оно сопоставится со всей строкой, а не только с "<H1>". Добавив "?" после классификатора, мы получим не жадное или минимальное сопоставление; будут сопоставляться как можно меньшее количество символов. Используя .*? в предыдущем выражении, мы заставим его сопоставиться лишь с "<H1>".
{m,n}
Заставляет результирующее РВ сопоставляться с предшествующим РВ, повторенным, насколько возможно, от m до n раз. Например, a{3,5} соответствует символу "a" в количестве от 3 до 5. При отсутствии m, нижняя граница равна 0; при отсутствии n, верхняя граница равна бесконечности.
{m,n}?
Заставляет результирующее РВ сопоставляться с предшествующим РВ, повторенным, как можно меньше, от m до n раз. Это "не жадная" версия предыдущего классификатора. Например, для 6-символьной строки "aaaaaa", a{3,5} будет соответствовать 5 символам "a", в то время как a{3,5}? будет сопоставляться лишь с 3 символами.
← →
NAlexey (2003-10-03 17:43) [9]"\"
Либо задает специальные символы (позволяя Вам сопоставлять с символами подобно "*", "?" и т.д.), или сигнализирует о наличии специальной последовательности; специальные последовательности обсуждаются ниже.
Если Вы не используете нотацию необработанных строк при записи шаблонов, то следует помнить, что Python так же использует обратный слэш как escape последовательность в строковых литералах; если escape последовательность не была распознана разборщиком Python, то слэш и последующая последовательность символов включаются в результирующую строку. Однако, если бы Python распознал результирующую последовательность, то следовало бы писать обратный слэш дважды. Это запутанно и сложно для понимания, поэтому, настоятельно рекомендуется использовать нотацию необработанных строк при записи всех шаблонов, за исключением простейших.
[]
Используется для задания набора символов. Символы могут быть перечисленны по отдельности, или в виде диапазона, задаваемого с помощью двух символов, разделенных "-". Специальные символы не активны внутри таких наборов. Например, [akm$] будет соответствовать любому из символов "a", "k", "m", или "$"; [a-z] будет сопоставляться с любой буквой в нижнем регистре, а [a-zA-Z0-9] соответствует любой букве или цифре. Классы символов, такие как \w или \S (описаны ниже) также доступны в диапазонах. Если Вы хотите включить "]" или "-" внутрь набора, предшествуйте их обратным слэшем, или поместите их в качестве первого символа. К примеру, шаблон []] сопоставляется с "]".
Вы можете сопоставлять символы вне диапазона дополнением набора. Это достигается включением "^" в качестве первого символа набора; "^" во всех остальных местах означает просто символ "^". Например, [^5] соответствует любому символу, за исключением "5".
"|"
A|B, где A и B -- произвольные РВ, создает регулярное выражение, которое согласуется как с A так и с B. Это можно использовать и внутри групп (смотрите ниже). Для сопоставления с литералом "|", используйте \|, или заключите его внутрь класса символов, как здесь: [|].
(...)
Согласуется, независимо от того, какое регулярное выражение находится в скобках, и указывает на начало и конец группы; после выполнения сопоставления, можно извлекать содержимое группы, а затем сопоставлять в строке со специальной последовательностью \номер, описанной ниже. Для сопоставления с литералами "(" или ")", следует писать \( или \), а можно заключить их внутрь класса символов: [(] [)].
(?...)
Расширенная нотация ("?", следующий за "(", в противном случае ничего не означает). Первый символ после "?" определяет значение и дополнительный синтаксис конструкции. Расширения обычно не создают новых групп; (?P<name>...) -- единственное исключение из этого правила. Ниже приведены расширения, поддерживаемые в настоящий момент.
(?iLmsx)
(Одна или более букв из набора "i", "L", "m", "s", "x".) Группа сопоставляется с пустой строкой; буквы устанавливают соответствующие флаги (re.I, re.L, re.M, re.S, re.X) для всего регулярного выражения. Это полезно, если Вы хотите включить флаги как часть регулярных выражений, вместо того, чтобы передавать аргумент flag в функцию compile().
(?:...)
Негруппирующая версия регулярных скобок. Сопоставляется, независимо от того, какое регулярное выражение находится в скобках, но подстрока, согласованная с группой, не может быть извлечена после выполнения сопоставления, как и нельзя позднее сослаться на нее в шаблоне.
(?P<name>...)
Похожа на регулярные скобки, но подстрока, согласованная с группой, доступна через символическое имя name группы. Имена групп должны быть допустимыми идентификаторами Python. Символическая группа является также нумерованной группой, так, как если бы у группы не было имени. Следовательно, к группе, названной "id", можно обратиться как к нумерованной группе 1.
Например, если задан шаблон (?P<id>[a-zA-Z_]\w*), на группу можно сослаться по ее имени в аргументах для методов объектов сопоставления, таких как m.group("id") или m.end("id"), и так же по имени, в тексте шаблона (напр., (?P=id)) или тексте замены (напр., \g<id>).
(?P=name)
Сопоствляется с любым текстом, ранее согласованным с группой name.
(?#...)
Комментарий; содержимое скобок просто игнорируется.
(?=...)
Сопоставляется, если затем ... сопоставимо, при этом не поглощается никакой части строки. Это называется упреждающим утверждением. Например, Isaac (?=Asimov) согласуется с "Isaac " только если после него следует "Asimov".
(?!...)
Сопоставляется, если затем ... не сопоставимо. Это негативное упреждающее утверждение. Например, Isaac (?!Asimov) согласуется с "Isaac " только если после него не следует "Asimov".
Специальные последовательности состоят из "\" и символа в нижеследующем списке. Если обычный символ не присутствует в этом списке, то результирующее РВ будет сопоставимо со вторым символом. Например, \$ соответствует символу "$".
\номер
Сопоставляется с содержимым группы заданного номера. Группы нумеруются начиная с 1. К примеру, (.+) \1 согласуется с "the the" или "55 55", но не с "the end" (обратите внимание на пробел после группы). Такая специальная последовательность может использоваться только для первых 99 групп. Если первый разряд номера равен 0, или номер состоит из 3 разрядов, то это не будет интерпретироваться как сопоставление группы, а лишь будет считаться символом с восьмеричным значением номер. Внутри "[" и "]" класса символов, все числовые escapes последовательности считаются символами.
\A
Сопоставляется только в начале строки.
\b
Сопоставляется с пустой строкой, но только в начале или конце строки. Слово определяется как последовательность текстовых символов, а конец строки указывается любым символом пробела или не текстовым символом. Внутри диапазона символов, \b обозначает символ забоя (backspace), для совместимости со строковыми литералами Python.
\B
Сопоставляется с пустой строкой, но только когда она не в начале или конце слова.
\d
Сопоставляется с любой десятичной цифрой; это эквивалент набора [0-9].
\D
Сопоставляется с любым не цифровым символом; это эквивалент набора [^0-9].
\s
Сопоставляется с любым символом пробела; это эквивалент набора [ \t\n\r\f\v].
\S
Сопоставляется с любым символом отличным от пробела; это эквивалент набора [^ \t\n\r\f\v].
\w
Если не был определен флаг LOCALE, то сопоставляется с любым текстовым символом; это эквивалент набора [a-zA-Z0-9_]. При установленном LOCALE, будет соответствовать набору [0-9_] плюс любой символ, определенный как буква для текущего места действия.
\W
Когда не определен флаг LOCALE, то сопоставляется с любым не текстовым символом; это эквивалент набора [^a-zA-Z0-9_]. При установленном LOCALE, будет соответствовать любому символу вне набора [0-9_], и не определенного как буква для текущего места действия.
\Z
Сопоставляется только в конце строки.
\\
Соответствует символу обратного слэша.
← →
NickBat (2003-10-03 17:59) [10]Вот умник, блин. Человек попросил расшивровать, а не справку привести. Справка у него я думаю есть. :)))
← →
Е-Моё имя (2003-10-03 18:18) [11]
> [7] han_malign © (03.10.03 17:42)
> >Е-Моё имя © (03.10.03 17:08) [3]
> - какое отношение имеют регулярные выражения борландового
> поисковика к регулярным выражениям aw(Perl)???
ОГРОМНОЕ! слово регулярные
=))))
а где видно что это для perl?
← →
Knight (2003-10-03 18:48) [12]>> han_malign © (03.10.03 17:42) [7]
> - небольшая ошибочка (\x7F-\xFF) - не буквы русского алфавита -
> у них диапазон поменьше - просто все символы расширенного
> алфавита.
Точно, не посмотрел... русский, наверно, будет (\xС0-\xFF)
> / - "скобки" регулярного выражения в aw/Perl
Обязательный элемент? Без них шаблон вpreg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/",$S)
будет восприниматься просто как строка, что-ли?
>> NAlexey © (03.10.03 17:43) [9]
Спасибо, тоже пригодится... :)
>> Е-Моё имя © (03.10.03 18:18) [11]
> а где видно что это для perl?
Звиняюсь, не уточнил... PHP
← →
Тих (2003-10-03 21:27) [13]/[^(\w)|(\x7F-\xFF)|(\s)]/
\w любая буква, число или символ "_"
\x7F-\xFF - диапазон шестнадцатиричных символов
\s - пробел, табуляция, возврат каретки, перенос строки
^ - отрицание всего этого, т.е. любой из символов, не входящих в сипсок + ОТКРЫВАЮЩАЯ И ЗАКРЫВАЮЩАЯ СКОБКИ - здесь они не будут служить для запоминания совпадения; для запоминания совпадения скобки следует вынести за пределы []
[] - поиск ОДНОГО символа
Общий смысл - поиск (не запоминание) ОДНОГО символа, НЕ входящего во множество { перечисленный диапазон + скобки }
← →
Тих (2003-10-03 21:35) [14]кстати, ещё тонкость - "|" здесь так же оператором выбора не является, а попадает в это же множество инвертированного символьного класса, как и скобки.
← →
Knight (2003-10-03 21:40) [15]>> Тих (03.10.03 21:27) [13]
Только я не понял, а к какому из этих диапазонов относятся знаки препинания? Пролетают мимо шаблона...
А так чудьненько... Жаль нет кнопки "Закрыть тему"... :)
← →
Тих (2003-10-03 21:43) [16]Ну и на закуску. "Я рыдалъ"
http://www.linux.org.ru/view-message.jsp?msgid=392747
← →
Knight (2003-10-03 22:22) [17]>> Тих (03.10.03 21:43) [16]
Ну и приколы у них... :)
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.01 c