Intereting Posts

Знак вопроса Regex

Чтобы сопоставить строку с шаблоном, например:

-TEXT-someMore-String 

Чтобы получить -TEXT- , я узнал, что это работает:

 /-(.+?)-/ // -TEXT- 

Насколько я знаю ? делает предыдущий токен дополнительным, как в:

colou?r соответствует colour и color

Я сначала -TEXT- регулярное выражение, чтобы получить -TEXT- часть следующим образом:

 /-(.+)-/ 

Но это дало -TEXT-someMore- .

Как добавление ? останавливает регулярное выражение, чтобы правильно получить -TEXT- часть? Поскольку он использовал, чтобы сделать предыдущий токен необязательным, не останавливаясь в определенный момент, как в приведенном выше примере?

Solutions Collecting From Web of "Знак вопроса Regex"

Как вы говорите ? иногда означает «ноль или один», но в вашем регулярном выражении +? это единое целое, означающее «один или несколько – и желательно как можно меньше». (Это контрастирует с голым + , что означает «один или несколько – и желательно как можно больше»).

Как указано в документации :

Однако, если за квантификатором следует знак вопроса, тогда он становится ленивым и вместо этого сопоставляет минимальное количество раз, поэтому шаблон /\*.*?\*/ делает правильные вещи с комментариями C. Значение различных кванторов не изменяется иначе, просто предпочтительное количество совпадений. Не путайте это использование вопросительного знака с его использованием в качестве квантификатора в своем собственном праве. Поскольку он имеет два вида использования, он иногда может быть удвоен, как в \d??\d который соответствует одной цифре по предпочтению, но может соответствовать двум, если это единственный способ соответствия остальной части шаблона.

В качестве альтернативы вы можете использовать модификатор U ngreedy, чтобы установить все регулярное выражение для поиска, желательно как можно короче:

 /-(.+)-/U 

? прежде чем токен будет сокращен для {0,1}, что означает: все, что от 0 до 1 появления в качестве основного.

Но + – не токен, а квантификатор. сокращенное для {1,}: 1 до бесконечных выступлений.

A? после того, как квантор устанавливает его в режим неразделения. Если в жадном режиме он соответствует максимально возможной строке. Если не жадный, он соответствует как можно меньше

Другая, возможно, основная ошибка в вашем регулярном выражении состоит в том, что вы пытаетесь сопоставить несколько произвольных символов с помощью .+? , Тем не менее, вы действительно хотите, вероятно,: «любой символ кроме -». Вы можете получить это через [^-]+ В этом случае не имеет значения, если вы делаете жадный матч или нет – повторное совпадение прекратится, как только вы столкнетесь со вторым «-» в своей строке.