Какие хорошие регулярные выражения?

голоса
10

Я работал в течение 5 лет в основном в Java Desktop приложений с доступом к базам данных Oracle, и я никогда не использовал регулярные выражения. Теперь я вхожу переполнения стека, и я вижу много вопросов о них; Я чувствую, что я что-то пропустил.

Для чего вы используете регулярные выражения?

PS извините за мой плохой английский

Задан 07/08/2008 в 17:48
источник пользователем
На других языках...                            


9 ответов

голоса
7

Рассмотрим пример, в 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]

Здесь скобки в регулярном выражении отметить группу захвата, так что вы можете точно узнать, что данные, которые вы совпадают, так что вы можете сделать дальнейшую обработку.

Это только верхушка айсберга ... Есть много много различных вещей, которые вы можете сделать в регулярном выражении, что делает обработки текста очень легко.

Ответил 07/08/2008 в 18:02
источник пользователем

голоса
7

Регулярные выражения (или Regex) используются для сопоставления с образцом в строках. Таким образом, вы можете вытащить все адреса электронной почты из куска текста, поскольку он следует определенному образцу.

В некоторых случаях регулярные выражения заключаются в форвардном слэше и после второго слэша размещаются варианты, такие как прецедентная нечувствительность. Вот хороший один :)

/(bb|[^b]{2})/i

Говорят, что можно прочитать «2 быть или не быть 2».

Первая часть являются (скобками), они разделены по трубе | символ , который приравнивается к или заявлению так (а | б) соответствует «а» или «б». Первая половина централизованной области соответствует «ббу». Название второй половины, я не знаю , но это квадратные скобки, они совпадают все , что не «б», поэтому есть символ крыши штучка (технический термин) есть. В фигурных скобках соответствуют подсчету вещей перед ними, в этом случае два символа, которые не являются «б».

После того, как второй / является «я», что делает его чувствительно к регистру. Использование начальной и конечной косой черты является среда конкретным, иногда вы делаете, и иногда нет.

Две ссылки, которые я думаю, вы найдете удобный для этого

  1. regular-expressions.info
  2. Википедия - Регулярное выражение
Ответил 07/08/2008 в 17:51
источник пользователем

голоса
6

Самое холодное время регулярное выражение когда - либо :

/^1?$|^(11+?)\1+$/

Он проверяет, является ли число простым. И это работает !!

NB: чтобы заставить его работать, немного настройки требуется; число , которое мы хотим проверить должно быть преобразовано в строку « 1» s первым, то мы можем применить выражение , чтобы проверить , если строка вовсе не содержит простое число « 1» с:

def is_prime(n)
  str = "1" * n
  return str !~ /^1?$|^(11+?)\1+$/ 
end

Там есть и очень Детальные объяснения доступных через в блоге Авинаша Meetoo в .

Ответил 25/08/2008 в 11:48
источник пользователем

голоса
2

Если вы хотите узнать о регулярных выражениях, я рекомендую Регулярные выражения . Он проходит весь путь от самых основных понятий, вплоть до разговоров о том , как различные двигатели работают под ним. Последние 4 главы также дает специальную главу каждой из PHP, .NET, Perl и Java. Я многому научился у него, и до сих пор используют его в качестве ссылки.

Ответил 19/08/2008 в 01:00
источник пользователем

голоса
0

Проверка надежных паролей :

Это один будет проверять пароль длиной от 5 до 10 алфавитно-цифровых символов, по меньшей мере, один верхний регистр, один нижний регистр и одна цифра:

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9]{5,10}$
Ответил 17/09/2009 в 10:00
источник пользователем

голоса
0

Эти RE являются специфическими для Visual Studio и C ++, но я нашел, что они полезны в разы:

Найти все вхождения «routineName» с нестандартными параметрами Params прошло:

routineName \ (: а + \)

С другой стороны, чтобы найти все вхождения «routineName» только по умолчанию: routineName \ (\)

Чтобы найти код включен (или отключен) в отладочных:

\#если. _ОТЛАЖИВАТЬ*

Обратите внимание, что это будет ловить все варианты: IFDEF, если определено, IfNDef, если она определена

Ответил 25/08/2008 в 12:37
источник пользователем

голоса
0

Как вы знаете, Oracle теперь имеет регулярные выражения: http://www.oracle.com/technology/oramag/webcolumns/2003/techarticles/rischert_regexp_pt1.html . Я использовал новую функциональность в несколько запросов, но это не было так полезно , как и в других контекстах. Причина, на мой взгляд, является то , что регулярные выражения лучше всего подходят для поиска структурированных данных захороненных в неструктурированных данных.

Например, я мог бы использовать регулярное выражение для поиска сообщений Oracle, которые чучела в лог-файл. Это не возможно знать, где сообщения - только то, что они похожи. Таким образом, регулярное выражение является лучшим решением этой проблемы. При работе с реляционной базой данных, данные, как правило, предварительно структурированы, поэтому регулярное выражение не светит в этом контексте.

Ответил 19/08/2008 в 00:54
источник пользователем

голоса
0

Если вы только начинаете с регулярными выражениями, я от всей души рекомендую такой инструмент, как The Regex Coach:

http://www.weitz.de/regex-coach/

также слышал хорошие вещи о RegexBuddy:

http://www.regexbuddy.com/

Ответил 07/08/2008 в 18:10
источник пользователем

голоса
0

Регулярное выражение (регулярное выражение или регулярное выражение для краткости) это специальная текстовая строка для описания шаблона поиска. Вы можете думать о регулярных выражениях , как маски на стероидах. Вы, вероятно , знакомы с подстановочными нотациями , такими как *.txtнайти все текстовые файлы в файловом менеджере. Регулярное выражение эквивалент .*\.txt$.

Большой ресурс для регулярных выражений: http://www.regular-expressions.info

Ответил 07/08/2008 в 17:50
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more