正则表达式字符串零或更多

时间:2015-02-11 09:58:09

标签: php regex string

我遵循正则表达式:

(.*?)( EUR)\1*

并在字符串2 mm; EUR上匹配2mm;EUR 但是字符串2 mm;没有匹配!?

但为什么呢?我认为*意味着零次或多次? 你能帮助我吗? 谢谢!

3 个答案:

答案 0 :(得分:0)

说出你想要的结果会更好。

如果你想要一个正则表达式匹配“2毫米;欧元”或“2毫米;”,它意味着你想匹配一个从某种数字开始的字符串(可能是一个毫米长度?类似的东西),以“;”结尾最后是字符串“EUR”。

如果它是你想要的,你的正则表达式应该有一个“;”在里面用欧元标记“?” (0或1)

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

答案 1 :(得分:0)

以下正则表达式将匹配两种情况,2 mm; EUR以及2 mm;

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

Example

答案 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时捕获整个字符串。