Каковы хорошие регулярные выражения?
Я работал в течение 5 лет, главным образом, в приложениях Java для работы с базами данных Oracle, и я никогда не использовал регулярные выражения. Теперь я вхожу в Stack Overflow, и я вижу много вопросов о них; Я чувствую, что что-то пропустил.
Для чего вы используете регулярные выражения?
P.S. извините за мой плохой английский
Ответы
Ответ 1
Рассмотрим пример в 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]
Здесь скобка в регулярном выражении помещает группу захвата, поэтому вы можете точно видеть, ЧТО данные совпадают, поэтому вы можете продолжить обработку.
Это только верхушка айсберга... есть много разных вещей, которые вы можете сделать в регулярном выражении, которое делает обработку текста ДЕЙСТВИТЕЛЬНО легкой.
Ответ 2
Регулярные выражения (или регулярные выражения) используются для сопоставления строк в строках. Таким образом, вы можете вытащить все электронные адреса из фрагмента текста, поскольку он следует определенному шаблону.
В некоторых случаях регулярные выражения заключаются в прямые слэши, а после второй косой черты помещаются такие параметры, как нечувствительность к регистру. Вот хороший:)
/(bb|[^b]{2})/i
Разговорный язык может читать "2 быть или не быть 2".
Первая часть - это (скобки), они расщепляются по трубе | символ, который приравнивается к выражению or, поэтому (a | b) соответствует "a" или "b" . Первая половина области трубопровода соответствует "bb". Второе имя, которое я не знаю, но это квадратные скобки, они соответствуют всем, что не "b" , поэтому есть символ символа крыши (технический термин). Скользящие скобки соответствуют количеству вещей перед ними, в этом случае два символа, которые не являются "b" .
После второго/является "i", что делает регистр нечувствительным. Использование стартовой и конечной косых черт относится к среде, иногда вы делаете, а иногда и не делаете.
Две ссылки, которые, как мне кажется, вам удобны, это
Ответ 3
Самое крутое регулярное выражение:
/^1?$|^(11+?)\1+$/
Он проверяет, является ли число простым. И это работает!
N.B.: чтобы заставить его работать, требуется немного настройки; число, которое мы хотим проверить, должно быть сначала преобразовано в строку "1
", затем мы можем применить выражение для проверки, не содержит ли строка "1
" s:
def is_prime(n)
str = "1" * n
return str !~ /^1?$|^(11+?)\1+$/
end
Theres подробное и очень доступное объяснение в блог Avinash Meetoos.
Ответ 4
Если вы хотите узнать о регулярных выражениях, я рекомендую Освоение регулярных выражений. Это происходит от самых основных понятий, вплоть до разговора о том, как работают разные двигатели. В последних 4 главах также посвящена отдельная глава для каждого из PHP,.NET, Perl и Java. Я многому научился у него и все еще использую его как ссылку.
Ответ 5
Регулярное выражение (регулярное выражение или регулярное выражение для краткости) представляет собой специальную текстовую строку для описания шаблона поиска. Вы можете думать о регулярных выражениях как подстановочные знаки на стероидах. Вероятно, вы знакомы с подстановочными обозначениями, такими как *.txt
, чтобы найти все текстовые файлы в файловом менеджере. Эквивалент регулярного выражения .*\.txt$
.
Отличный ресурс для регулярных выражений: http://www.regular-expressions.info
Ответ 6
Если вы только начинаете с регулярных выражений, я от всей души рекомендую инструмент, такой как The Regex Coach:
http://www.weitz.de/regex-coach/
также слышал хорошие вещи о RegexBuddy:
http://www.regexbuddy.com/
Ответ 7
Как вы знаете, Oracle теперь имеет регулярные выражения: http://www.oracle.com/technology/oramag/webcolumns/2003/techarticles/rischert_regexp_pt1.html. Я использовал новую функциональность в нескольких запросах, но она не так полезна, как в других контекстах. Причина, по-моему, заключается в том, что регулярные выражения лучше всего подходят для поиска структурированных данных, скрытых в неструктурированных данных.
Например, я могу использовать регулярное выражение для поиска сообщений Oracle, которые заполняются в файле журнала. Невозможно узнать, где находятся сообщения - только то, на что они похожи. Поэтому регулярное выражение является лучшим решением этой проблемы. Когда вы работаете с реляционной базой данных, данные обычно предварительно структурированы, поэтому регулярное выражение не светит в этом контексте.
Ответ 8
Эти RE специфичны для Visual Studio и С++, но я нашел их полезными время от времени:
Найти все вхождения "имя_подпрограммы" с переданными параметрами не по умолчанию:
routineName\(: а + \)
И наоборот, чтобы найти все вхождения "имя_подпрограммы" только с настройками по умолчанию: routineName\(\)
Чтобы найти код включен (или отключен) в сборке отладки:
\ # if._DEBUG *
Обратите внимание, что это поймает все варианты: ifdef, если определено, ifndef, if! defined
Ответ 9
Проверка надежных паролей:
Этот пароль будет проверять пароль длиной от 5 до 10 буквенно-цифровых символов, по крайней мере, в одном верхнем регистре, в одном нижнем регистре и в одной цифре:
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9]{5,10}$