Сведения о вопросе

LARVION

16:03, 1st July, 2020

Теги

regex    

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

Просмотров: 335   Ответов: 9

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

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

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



  Сведения об ответе

PHPH

18:03, 1st July, 2020

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

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

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

Произносимая она может читать "2 be or not 2 be".

Первая часть - это (скобки), они разделены символом pipe | , который приравнивается к оператору or, так что (a|b) соответствует "a" или "b". Первая половина участка трубопровода соответствует "bb". Название второй половины я не знаю, но это квадратные скобки, они соответствуют всему, что не является "b", поэтому там есть символ крыши thingie (технический термин). Волнистые скобки соответствуют количеству вещей перед ними, в этом случае два символа, которые не являются "b".

После второго / - это "i", что делает его нечувствительным к регистру. Использование начальной и конечной косых черт зависит от конкретной среды, иногда вы это делаете, а иногда нет.

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

  1. обычный-expressions.info
  2. Википедия-регулярное выражение


  Сведения об ответе

dump

18:03, 1st July, 2020

Рассмотрим пример в 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}/ " - это регулярное выражение, и, как вы можете видеть, это VERY краткий способ найти совпадение в строке.

Кроме того, используя группы, вы можете извлечь информацию, как таковую:

match = /([^@]*)@(.*)/.match("myaddress@domain.com")
name = match[1]
domain = match[2]

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

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


  Сведения об ответе

darknet

18:03, 1st July, 2020

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

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

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

N.B.: чтобы это сработало, нужно немного настроить; число, которое мы хотим проверить, сначала должно быть преобразовано в строку “ 1 "s, а затем мы можем применить выражение для проверки, если строка не содержит простого числа “ 1" s:

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

Есть подробный и очень доступным объяснением в блоге Авинаша через тернии к звездам! это .


  Сведения об ответе

piter

18:03, 1st July, 2020

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


  Сведения об ответе

crush

18:03, 1st July, 2020

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

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

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9]{5,10}$


  Сведения об ответе

#hash

18:03, 1st July, 2020

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

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


  Сведения об ответе

COOL

18:03, 1st July, 2020

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

Отличный ресурс для регулярных выражений: http://www.regular-expressions.info


  Сведения об ответе

lesha

18:03, 1st July, 2020

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

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

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

http://www.regexbuddy.com/


  Сведения об ответе

davran

18:03, 1st July, 2020

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

Найти все вхождения "routineName" с ненулевыми парами, переданными по умолчанию:

routineName\(:a+\)

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

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

\#if. _DEBUG*

Обратите внимание, что это будет ловить все варианты: ifdef, if defined, ifndef, if !определенный


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться