2015-02-11 3 views
0

меня следовать Regex:Regex Строка ноль или более

(.*?)(EUR)\1* 

и строки 2 mm; EUR он соответствует 2mm; и EUR но строка 2 mm; не совпадает ни с чем !?

Но почему? Я думал, что * означает ноль или более раз? Вы можете мне помочь? Спасибо!

+3

Потому что в этой строке нет 'EUR' – HamZa

+0

Но у меня есть« * »позади? Что говорят 0 или более матчей? – Flo

+1

Квантеры применяются к маркеру, который предшествует. В этом случае точка '.'. Если вы хотите сделать опцию 'EUR' опциональной, то после нее отметьте еще один вопросительный знак' (EUR)? '. '?': ноль или один раз. – HamZa

ответ

0

Это был бы лучший подход, чтобы рассказать, какой результат вы хотите.

Если вы хотите, чтобы регулярное выражение соответствовало «2 мм, EUR» или «2 мм;», это означает, что вы хотите совместить строку, начинающуюся с какого-то числа (может быть, это длина миллиметра) , заканчивающийся символом ";" и в конце концов следует строка «EUR».

Если это то, что вы хотите, ваше регулярное выражение должно иметь «;» внутри и отметьте EUR с помощью?? (0 или 1)

([\n]+ .*?);(EUR)? 
+0

Спасибо! В результате я хочу: если найдено "EUR" чем вернуть все до , если нет, тогда результат все «мм» и «;» не уверен ... только уверен, что это «EUR», но также ему также может понравиться «4 мм 7,50 EUR EUR» – Flo

0

Следующая регулярное выражение будет соответствовать оба случая, 2 mm; EUR, а также 2 mm;

(.*?;\s)(EUR)|(.*;) 

Example

0

Да вы правы * означает «ноль или более раз ». То, что вы, кажется, не понимаете, это \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.

+0

То не совсем то, что я ищу ... Я получу все до (EUR), и если что не существует, тогда возвратите все ... – Flo

+0

Два вопроса, чтобы убедиться, что это правильное регулярное выражение: Если EUR находится в середине строки, правильно ли игнорировать все, что следует? Гарантировано, что есть место перед EUR. –

Смежные вопросы