Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
14-74401
Murad
2003-10-03 10:48
2003.10.23
Женские


14-74409
MooSE
2003-10-06 09:53
2003.10.23
Cabinet.dll


3-73997
Nikitos
2003-09-30 19:53
2003.10.23
истоория изменений


3-74061
Kinder
2003-10-02 15:44
2003.10.23
картинка в БД


8-74333
Vovan_
2003-06-20 16:05
2003.10.23
Интеграция с Flash MX





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский