Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.23;
Скачать: CL | DM;

Вниз

Кто-нибудь один... не надо много   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.03 c
6-74360
Pacifist
2003-08-21 19:15
2003.10.23
Подключение к Сокетам в условии динамического IP :)


7-74501
MAPIIIAJL
2003-08-07 18:08
2003.10.23
Проблема с записью информации в COM-порт под WinXP


14-74428
ИМХО
2003-10-06 16:05
2003.10.23
Теория DBF


3-73996
Ish1
2003-09-30 17:52
2003.10.23
Изменить LangDriver Таблицы


1-74147
satron
2003-10-10 14:38
2003.10.23
Как на форме сделать URL ?