Знак вопроса Regex
Насколько я знаю ? делает предыдущий токен дополнительным, как в:
colou?r соответствует colour и color
Я сначала -TEXT- регулярное выражение, чтобы получить -TEXT- часть следующим образом:
Как добавление ? останавливает регулярное выражение, чтобы правильно получить -TEXT- часть? Поскольку он использовал, чтобы сделать предыдущий токен необязательным, не останавливаясь в определенный момент, как в приведенном выше примере?
Solutions Collecting From Web of «Знак вопроса Regex»
Как вы говорите ? иногда означает «ноль или один», но в вашем регулярном выражении +? это единое целое, означающее «один или несколько – и желательно как можно меньше». (Это контрастирует с голым + , что означает «один или несколько – и желательно как можно больше»).
Как указано в документации :
Однако, если за квантификатором следует знак вопроса, тогда он становится ленивым и вместо этого сопоставляет минимальное количество раз, поэтому шаблон /\*.*?\*/ делает правильные вещи с комментариями C. Значение различных кванторов не изменяется иначе, просто предпочтительное количество совпадений. Не путайте это использование вопросительного знака с его использованием в качестве квантификатора в своем собственном праве. Поскольку он имеет два вида использования, он иногда может быть удвоен, как в \d??\d который соответствует одной цифре по предпочтению, но может соответствовать двум, если это единственный способ соответствия остальной части шаблона.
В качестве альтернативы вы можете использовать модификатор U ngreedy, чтобы установить все регулярное выражение для поиска, желательно как можно короче:
? прежде чем токен будет сокращен для , что означает: все, что от 0 до 1 появления в качестве основного.
Но + – не токен, а квантификатор. сокращенное для : 1 до бесконечных выступлений.
A? после того, как квантор устанавливает его в режим неразделения. Если в жадном режиме он соответствует максимально возможной строке. Если не жадный, он соответствует как можно меньше
Другая, возможно, основная ошибка в вашем регулярном выражении состоит в том, что вы пытаетесь сопоставить несколько произвольных символов с помощью .+? , Тем не менее, вы действительно хотите, вероятно,: «любой символ кроме -». Вы можете получить это через [^-]+ В этом случае не имеет значения, если вы делаете жадный матч или нет – повторное совпадение прекратится, как только вы столкнетесь со вторым «-» в своей строке.
- Как получить список общих друзей на Facebook с помощью их API?
- см., если переменная равна любым другим переменным в списке php
- shell_exec возвращает пустую строку
- Можно ли использовать конкатенацию строк для определения класса CONST в PHP?
- Javascript / PHP Family Tree Builder с несколькими родителями
- Настройка группы коротких / дружественных URL-адресов переадресации
- Как сгенерировать код клиента с мылом PHP?
- как получить файлы cookie из другого домена с помощью php и javascript
- Публикация объектов JSON на Symfony 2
- Преобразование php-массива в Javascript
- php Объект класса DateInterval не может быть преобразован в строку
- Массивы PHP в массивы javascript
- Значение приращения для MySQLi Update
- php: воссоздать и отобразить изображение из двоичных данных
- xPath не извлекает HTML как часть содержимого