Да вы правы *
означает «ноль или более раз ». То, что вы, кажется, не понимаете, это \1
. Это означает «контент, захваченный первой группой для увлечения».
Регулярное выражение (.*?)(EUR)\1*
означает поэтому:
любую строку, а затем четыре буквы EUR
(с пробелом), а затем ноль или более раз в начале строки.
Если строка 2 mm; EUR2 mm;2 mm;
, (.*?)
будет соответствовать 2 mm;
, (EUR)
будет соответствовать EUR
и \1*
будет соответствовать 2 mm;2 mm;
.
Теперь, когда вы понимаете свою ошибку, вам будет легче найти правильное выражение. Просто удалите \1
.
(.*?)(EUR)*
будет соответствовать ничего, а затем быть ноль или более раз EUR
.
^(.*?)(EUR.*)?$
будет соответствовать чему-либо перед «EUR» или всей строкой, если он отсутствует. Обратите внимание, что мы добавили начальную и конечную отметки, чтобы убедиться, что вся строка захвачена, когда нет EUR.
Потому что в этой строке нет 'EUR' – HamZa
Но у меня есть« * »позади? Что говорят 0 или более матчей? – Flo
Квантеры применяются к маркеру, который предшествует. В этом случае точка '.'. Если вы хотите сделать опцию 'EUR' опциональной, то после нее отметьте еще один вопросительный знак' (EUR)? '. '?': ноль или один раз. – HamZa