Избегайте не жадного модификатора, как что-либо, кроме подсказки производительности, если можете.Его использование может привести к «неожиданным» результатам, потому что добавление ?
на самом деле не мешает .*
сопоставлять что-либо.Например,
$ perl -le'print for "XaXbXY" =~ /X(.*?)XY/;'
aXb
Чтобы избежать совпадения X
, вы можете использовать следующее:
s/X[^X]*X//g;
Если X
действительно больше, чем один символ, выможно использовать следующее:
s/X(?:(?!X).)*X//g;