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