Чтобы сопоставить строку с шаблоном, например:
-TEXT-someMore-String
Чтобы получить -TEXT-
, я узнал, что это работает:
/-(.+?)-/ // -TEXT-
Насколько я знаю ?
делает предыдущий токен дополнительным, как в:
colou?r
соответствует colour
и color
Я сначала -TEXT-
регулярное выражение, чтобы получить -TEXT-
часть следующим образом:
/-(.+)-/
Но это дало -TEXT-someMore-
.
Как добавление ?
останавливает регулярное выражение, чтобы правильно получить -TEXT-
часть? Поскольку он использовал, чтобы сделать предыдущий токен необязательным, не останавливаясь в определенный момент, как в приведенном выше примере?
Как вы говорите ?
иногда означает «ноль или один», но в вашем регулярном выражении +?
это единое целое, означающее «один или несколько – и желательно как можно меньше». (Это контрастирует с голым +
, что означает «один или несколько – и желательно как можно больше»).
Как указано в документации :
Однако, если за квантификатором следует знак вопроса, тогда он становится ленивым и вместо этого сопоставляет минимальное количество раз, поэтому шаблон
/\*.*?\*/
делает правильные вещи с комментариями C. Значение различных кванторов не изменяется иначе, просто предпочтительное количество совпадений. Не путайте это использование вопросительного знака с его использованием в качестве квантификатора в своем собственном праве. Поскольку он имеет два вида использования, он иногда может быть удвоен, как в\d??\d
который соответствует одной цифре по предпочтению, но может соответствовать двум, если это единственный способ соответствия остальной части шаблона.
В качестве альтернативы вы можете использовать модификатор U ngreedy, чтобы установить все регулярное выражение для поиска, желательно как можно короче:
/-(.+)-/U
?
прежде чем токен будет сокращен для {0,1}, что означает: все, что от 0 до 1 появления в качестве основного.
Но +
– не токен, а квантификатор. сокращенное для {1,}: 1 до бесконечных выступлений.
A? после того, как квантор устанавливает его в режим неразделения. Если в жадном режиме он соответствует максимально возможной строке. Если не жадный, он соответствует как можно меньше
Другая, возможно, основная ошибка в вашем регулярном выражении состоит в том, что вы пытаетесь сопоставить несколько произвольных символов с помощью .+?
, Тем не менее, вы действительно хотите, вероятно,: «любой символ кроме -». Вы можете получить это через [^-]+
В этом случае не имеет значения, если вы делаете жадный матч или нет – повторное совпадение прекратится, как только вы столкнетесь со вторым «-» в своей строке.