Регулярные выражения - PullRequest
226 голосов
/ 15 июля 2011

Как мне сделать выражение, которое соответствует абсолютно всему (включая пробелы)?Пример:

Регулярное выражение: Я купил _____ овец.

Совпадений: Я купил овец.Я купил овцу.Я купил пять овец.

Я пытался использовать (.*), но, похоже, это не сработало.

Обновление: я получил его на работу, очевидно, проблема не врегулярные выражения, просто символы (.) экранировались.

Ответы [ 11 ]

244 голосов
/ 15 июля 2011

Обычно точка соответствует любому символу , за исключением новых строк .

Так что, если .* не работает, установите опцию «точка соответствует символу новой строки тоже» (или используйте (?s).*).

Если вы используете JavaScript, у которого нет опции "dotall", попробуйте [\s\S]*. Это означает «соответствовать любому количеству символов, которые являются пробельными или непробельными символами» - фактически «соответствовать любой строке».

Другой вариант, который работает только для JavaScript (и не распознается любым другим видом регулярного выражения), - это [^]*, который также соответствует любой строке. Но [\s\S]* кажется более широко используемым, возможно, потому, что он более переносим.

143 голосов
/ 06 марта 2015

(.*?) соответствует чему угодно - я использую это годами.

80 голосов
/ 12 февраля 2016

Выберите и запомните 1 из следующих !!! :)

[\s\S]*
[\w\W]*
[\d\D]*

Пояснение:

\s: пробел \S: не пробел

\w: слово \W: не слово

\d: цифра \D: не цифра

(Вы можете обменять * на +, если хотите, чтобы 1 или более символов [вместо 0 или более]).




РЕДАКТИРОВАНИЕ БОНУСА:

Если вы хотите сопоставить все в одной строке, вы можете использовать это:

[^\n]+

Пояснение:

^: не

\n: перевод строки

+: для 1 символа или более

15 голосов
/ 15 июля 2011

Попробуйте это:

I bought (.* )?sheep

или даже

I bought .*sheep
6 голосов
/ 15 июля 2011

Используйте .* и убедитесь, что вы используете эквивалент реализации одной строки, чтобы вы соответствовали окончаниям строки .

Здесь есть отличное объяснение -> http://www.regular -expressions.info / dot.html

1 голос
/ 13 мая 2019

Потому что . Найти один символ, кроме символа новой строки или окончания строки.

Итак, чтобы сопоставить что угодно, вы можете использовать вот так: (.|\n)*?

Надеюсь, это поможет!

1 голос
/ 24 октября 2018

Для JavaScript лучшим и простым ответом будет /.*/.

Как подсказывают другие, /(.*?)/ также будет работать, но /.*/ проще. () Внутри шаблона не нужны, насколько я вижу, ни окончание? соответствовать абсолютно всему (включая пустые строки)

NON-РЕШЕНИЯ:

/ [\ s \ S] / НЕ соответствует пустым строкам, поэтому это не решение.

/ [\ s \ S] * / соответствует также пустым строкам. Но у него есть проблема: если вы используете его в своем коде, вы не можете закомментировать такой код, поскольку '* /' интерпретируется как конец комментария.

/ ([\ s \ S] *) / работает и не имеет проблемы с комментариями. Но это длиннее и сложнее для понимания, чем /.*/.

1 голос
/ 21 сентября 2015

(.*?) у меня не работает. Я пытаюсь сопоставить комментарии, окруженные /* */, которые могут содержать несколько строк.

Попробуйте это:

([a]|[^a])

Это регулярное выражение соответствует a или anything else expect a. Абсолютно, это означает соответствие всему.

Кстати, в моей ситуации /\*([a]|[^a])*/ соответствует комментариям в стиле C.

Спасибо @mpen за более лаконичный способ.

[\s\S]
0 голосов
/ 21 июня 2019

Честно говоря, многие ответы старые, поэтому я обнаружил, что если вы просто протестируете любую строку независимо от содержимого символа с помощью "/.*/i", то получите ВСЕ.

0 голосов
/ 30 мая 2019

Рекомендую использовать /(?=.*...)/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 для проверки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...