我遵循正则表达式:
(.*?)( EUR)\1*
并在字符串2 mm; EUR
上匹配2mm;
和EUR
但是字符串2 mm;
没有匹配!?
但为什么呢?我认为*
意味着零次或多次?
你能帮助我吗?
谢谢!
答案 0 :(得分:0)
说出你想要的结果会更好。
如果你想要一个正则表达式匹配“2毫米;欧元”或“2毫米;”,它意味着你想匹配一个从某种数字开始的字符串(可能是一个毫米长度?类似的东西),以“;”结尾最后是字符串“EUR”。
如果它是你想要的,你的正则表达式应该有一个“;”在里面用欧元标记“?” (0或1)
([\n]+ .*?);( EUR)?
答案 1 :(得分:0)
答案 2 :(得分: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时捕获整个字符串。