Регулярные выражения
Как мне сделать выражение, чтобы соответствовать абсолютно всему (включая пробелы)?
Пример:
Regex: я купил _____ овец.
Спички: я купил овец. Я купил овцу. Я купил пять овец.
Я пытался использовать (.*)
, Но, похоже, это не работает.
Обновление: я заставил его работать, очевидно, проблема была не в регулярных выражениях, а в том, что экранировали символы (.).
Ответы
Ответ 1
Обычно точка соответствует любому символу, кроме строк новой строки.
Итак, если .*
не работает, установите опцию "dot matches newlines, too" (или используйте (?s).*
).
Если вы используете JavaScript, который не имеет опции "dotall", попробуйте [\s\S]*
. Это означает, что "соответствует любому количеству символов, которые являются либо пробельными, либо не-пробелами" - эффективно "соответствуют любой строке".
Другим вариантом, который работает только для JavaScript (и не признается каким-либо другим ароматом регулярного выражения), является [^]*
, который также соответствует любой строке. Но [\s\S]*
кажется более широко используемым, возможно потому, что он более портативен.
Ответ 2
(.*?)
соответствует чему угодно - я использую это годами.
Ответ 3
Выбрать и запомнить 1 из следующих!!!:)
[\s\S]*
[\w\W]*
[\d\D]*
Объяснение:
\s
: пробел \s
: не пробелы
\w
: слово \w
: не слово
\d
: digit \d
: not digit
(Вы можете обменять *
на +
, если вы хотите 1 или БОЛЬШЕ символов [вместо 0 или более]).
ИЗОБРАЖЕНИЕ БОНУСА:
Если вы хотите совместить все в одной строке, вы можете использовать это:
[^\n]+
Объяснение:
^
: not
\n
: linebreak
+
: для 1 символа или более
Ответ 4
Попробуйте следующее:
I bought (.* )?sheep
или даже
I bought .*sheep
Ответ 5
Используйте .*
, И убедитесь, что вы используете эквивалент реализации одной строки в ваших реализациях, так что вы будете соответствовать в конце строки.
Здесь есть отличное объяснение → http://www.regular-expressions.info/dot.html
Ответ 6
(.*?)
не работает для меня. Я пытаюсь совместить комментарии, окруженные /* */
, которые могут содержать несколько строк.
Попробуйте следующее:
([a]|[^a])
Это регулярное выражение соответствует a
или anything else expect a
. Абсолютно, это означает соответствие всем.
Кстати, в моей ситуации /\*([a]|[^a])*/
соответствует комментариям стиля C.
Благодарим @mpen за более сжатый способ.
[\s\S]
Ответ 7
Для JavaScript лучшим и самым простым ответом будет /.*/.
Как подсказывают другие,/(.*?)/тоже подойдет, но/.*/проще. () Внутри шаблона не нужны, насколько я вижу, ни окончание? соответствовать абсолютно всему (включая пустые строки)
NON-РЕШЕНИЯ:
/[\ s\S]/НЕ соответствует пустым строкам, поэтому это не решение.
/[\ s\S] */Соответствует также пустым строкам. Но у него есть проблема: если вы используете его в своем коде, вы не можете закомментировать такой код, потому что '*/' интерпретируется как конец комментария.
/([\ s\S] *)/работает и не имеет проблемы с комментариями. Но это длиннее и сложнее для понимания, чем /.*/.
Ответ 8
Потому что .
Найти один символ, кроме символа новой строки или окончания строки.
Таким образом, чтобы соответствовать чему-либо, вы можете использовать так: (.|\n)*?
Надеюсь, поможет!
Ответ 9
<?php
$str = "I bought _ sheep";
preg_match("/I bought (.*?) sheep", $str, $match);
print_r($match);
?>
http://sandbox.phpcode.eu/g/b2243.php
Ответ 10
Я рекомендую использовать /(?=.*...)/g
пример
const text1 = 'I am using regex';
/(?=.*regex)/g.test(text1) // true
const text2 = 'regex is awesome';
/(?=.*regex)/g.test(text2) // true
const text3 = 'regex is util';
/(?=.*util)(?=.*regex)/g.test(text3) // true
const text4 = 'util is necessary';
/(?=.*util)(?=.*regex)/g.test(text4) // false because need regex in text
Используйте regex101 для тестирования
Ответ 11
Честно говоря, многие ответы устарели, поэтому я обнаружил, что если вы просто протестируете любую строку независимо от содержимого символов с помощью "/.*/i", то получите ВСЕ.