Следуя моим рассуждениям, оно должно соответствовать пробелу> любым символам перед концом строки, а ?
делает он ленив, то есть abc)
? самый лучший матч.
Почему я делаю неправильно? не должно соответствовать abc)
?
Следуя моим рассуждениям, оно должно соответствовать пробелу> любым символам перед концом строки, а ?
делает он ленив, то есть abc)
? самый лучший матч.
Почему я делаю неправильно? не должно соответствовать abc)
?
он найдет первое место, а затем все остальное до конца строки.
Из-за заказа, это получит первый (космос) th en your
(.*?)
будет соответствовать всем до конца строки $
. Это выполняется слева направо.
Если вы действительно хотите сопоставить что-либо после последнего пробела, как указано @RevanProdigalKnight, вам нужно убедиться, что оно соответствует пробелу, а затем все, что не является пространством до конца строки. Я предлагаю следующее регулярное выражение:
/\s\S*$/
так, "?" ничего не делает? – Kryoschdrmurgjencsen
'*?' Это квантификатор, и он будет равен нулю до неограниченного времени, как можно меньше, расширяя по мере необходимости. Точка '.' соответствует также пробелам. –
@Kryoschdrmurgjencsen: Да, '?' Не имеет никакого эффекта. Создание квантификатора ленивое/неохотное/нежелюстное влияет только на то, где совпадение * заканчивается *, а не там, где оно начинается. '' 'Делает это несущественным в этом случае, поскольку он может соответствовать только концу строки (оставляя в стороне отвлечение режимов Multiline и Singleline/DOTALL). –
Ваше регулярное выражение:
(.*?)$
или сделать его более удобным для чтения:
\s(.*?)$
не очень ленивы, как нет ничего после ленивых квантор .*?
. Это почти то же самое, что и:
\s(.*)$
Именно поэтому он находит первое место и все после этого пространства.
Строка по-прежнему оценивается слева направо. Итак, матч начинается с первого места. Ленивый не обязательно означает кратчайший. –
Он находит первое место, а затем все после этого матча. Если вы хотите получить все после последнего пробела, вы должны использовать '/ (\ S *?) $ /' – RevanProdigalKnight