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

Решение от 2018

У нас есть: http://example.com?sent=yes

let searchParams = new URLSearchParams(window.location.search)

Высылает ли / g1] существуют?

searchParams.has('sent') // true

Он равен «да»?

let param = searchParams.get('sent')

, а затем просто сравните его.

11
задан Adam Bellaire 23 October 2008 в 16:06
поделиться

9 ответов

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

Здесь, круглая скобка в регулярном выражении отмечает группу фиксации, таким образом, Вы видите точно, ЧТО данные - то, что Вы соответствовали, таким образом, можно сделать последующую обработку.

Это - просто верхушка айсберга... существуют много много разных вещей, которые можно сделать в регулярном выражении, которое делает текст обработки ДЕЙСТВИТЕЛЬНО легким.

7
ответ дан 3 December 2019 в 05:14
поделиться

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

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

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

Разговорный это может читать "2 быть или не быть".

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

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

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

  1. регулярный-expressions.info
  2. Википедия - Регулярное выражение
7
ответ дан 3 December 2019 в 05:14
поделиться

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

2
ответ дан 3 December 2019 в 05:14
поделиться

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

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

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

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

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

Существует подробное и очень доступное объяснение, законченное в блоге Avinash Meetoo.

6
ответ дан 3 December 2019 в 05:14
поделиться

Они Ре характерно для Visual Studio и C++, но я находил их полезными время от времени:

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

routineName \(:a + \)

С другой стороны найти все случаи "routineName" только со значениями по умолчанию: routineName \(\)

Найти код включило (или отключил) в отладочная сборка:

\#if. _ ОТЛАЖИВАЮТ*

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

0
ответ дан 3 December 2019 в 05:14
поделиться

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

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

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

http://www.regexbuddy.com/

0
ответ дан 3 December 2019 в 05:14
поделиться

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

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

0
ответ дан 3 December 2019 в 05:14
поделиться

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

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

0
ответ дан 3 December 2019 в 05:14
поделиться

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

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

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9]{5,10}$
0
ответ дан 3 December 2019 в 05:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: