Я проработал 5 лет в основном в настольных java-приложениях, обращающихся к базам данных Oracle, и никогда не использовал регулярные выражения. Сейчас я захожу в Stack Overflow и вижу много вопросов по ним; Я чувствую, что что-то упустил.
Для чего вы используете регулярные выражения?
P.S. Извините за мой плохой английский





A regular expression (regex or regexp for short) is a special text string for describing a search pattern. You can think of regular expressions as wildcards on steroids. You are probably familiar with wildcard notations such as
*.txtto find all text files in a file manager. The regex equivalent is.*\.txt$.
Отличный ресурс по регулярным выражениям: http://www.regular-expressions.info
Регулярные выражения (или Regex) используются для сопоставления с образцом в строках. Таким образом, вы можете извлечь все адреса электронной почты из фрагмента текста, потому что он следует определенному шаблону.
В некоторых случаях регулярные выражения заключаются в косую черту, а после второй косой черты помещаются такие параметры, как нечувствительность к регистру. Вот хороший :)
/(bb|[^b]{2})/i
В разговоре это может читаться как «2 будет или 2 не будет».
Первая часть - скобки, они разделены трубкой | символ, который соответствует оператору или, поэтому (a | b) соответствует «a» или «b». Первая половина площади водопровода соответствует «bb». Название второй половины я не знаю, но это квадратные скобки, они соответствуют всему, что нет "b", поэтому там есть символ крыши (технический термин). Волнистые скобки соответствуют количеству вещей перед ними, в данном случае два символа, которые не являются «b».
После второго / стоит «i», что делает его нечувствительным к регистру. Использование начальной и конечной косой черты зависит от среды, иногда вы это делаете, а иногда нет.
Две ссылки, которые, я думаю, вам пригодятся:
Это хорошее описание, но реальный пример Майка предпочтительнее каламбурного «2b». Было бы неплохо совместить два.
Кронштейны squiggly относительно 2 встречаются нечасто, это curly ..
Рассмотрим пример на Ruby:
puts "Matched!" unless /\d{3}-\d{4}/.match("555-1234").nil?
puts "Didn't match!" if /\d{3}-\d{4}/.match("Not phone number").nil?
"/ \ D {3} - \ d {4} /" - это регулярное выражение, и, как вы можете видеть, это ОЧЕНЬ лаконичный способ поиска совпадения в строке.
Кроме того, с помощью групп вы можете извлекать информацию как таковую:
match = /([^@]*)@(.*)/.match("[email protected]")
name = match[1]
domain = match[2]
Здесь круглые скобки в регулярном выражении обозначают группу захвата, поэтому вы можете точно увидеть, ЧТО именно данные вы сопоставили, чтобы вы могли продолжить обработку.
Это лишь верхушка айсберга ... с помощью регулярного выражения можно делать много разных вещей, которые ДЕЙСТВИТЕЛЬНО упрощают обработку текста.
Если вы только начинаете работать с регулярными выражениями, я настоятельно рекомендую такой инструмент, как The Regex Coach:
http://www.weitz.de/regex-coach/
также слышал хорошие отзывы о RegexBuddy:
Как вы, возможно, знаете, в Oracle теперь есть регулярные выражения: http://www.oracle.com/technology/oramag/webcolumns/2003/techarticles/rischert_regexp_pt1.html. Я использовал новую функциональность в нескольких запросах, но она оказалась не такой полезной, как в других контекстах. Я считаю, что причина в том, что регулярные выражения лучше всего подходят для поиска структурированных данных, скрытых внутри неструктурированных данных.
Например, я мог бы использовать регулярное выражение для поиска сообщений Oracle, которые помещаются в файл журнала. Невозможно узнать, где находятся сообщения - только то, как они выглядят. Так что регулярное выражение - лучшее решение этой проблемы. Когда вы работаете с реляционной базой данных, данные обычно предварительно структурированы, поэтому регулярное выражение не подходит для этого контекста.
Если вы хотите узнать о регулярных выражениях, я рекомендую Освоение регулярных выражений. Он идет от самых базовых концепций до разговоров о том, как работают разные движки. Последние 4 главы также посвящены каждому из PHP, .Net, Perl и Java. Я многому из него научился и до сих пор использую в качестве справочника.
Самое крутое регулярное выражение Когда-либо:
/^1?$|^(11+?)+$/
Он проверяет, является ли число простым. И это работает !!
Примечание: чтобы это работало, требуется небольшая настройка; число, которое мы хотим проверить, нужно сначала преобразовать в строку «1», тогда, мы можем применить выражение, чтобы проверить, содержит ли строка нет простое число «1»:
def is_prime(n)
str = "1" * n
return str !~ /^1?$|^(11+?)+$/
end
Подробное и очень доступное объяснение находится на Блог Авинаша Meetoo.
Умно, но новичку вряд ли подойдет! :)
@Copas: Это абсолютно работает. Вы читали инструкции и объяснения, на которые я ссылался?
Эти RE специфичны для Visual Studio и C++, но иногда я нахожу их полезными:
Найдите все вхождения «имя_программы» с параметрами, отличными от параметров по умолчанию:
имя_программы \ (: a + \)
И наоборот, чтобы найти все вхождения «имя_программы» только со значениями по умолчанию: имя_программы \ (\)
Чтобы найти код включенным (или отключенным) в отладочной сборке:
\#если._DEBUG *
Обратите внимание, что это перехватит все варианты: ifdef, если определено, ifndef, если! Определено
Проверка надежных паролей:
Это будет проверять пароль длиной от 5 до 10 буквенно-цифровых символов, по крайней мере, с одним верхним регистром, одним нижним регистром и одной цифрой:
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9]{5,10}$
Не забудьте прочитать Javadocs для java.util.regex.Pattern. Это хорошая ссылка. Также perldoc.perl.org/perlre.html