Php 正则表达式字符串零或更多
我一直关注正则表达式:Php 正则表达式字符串零或更多,php,regex,string,Php,Regex,String,我一直关注正则表达式: (.*?)( EUR)\1* 在2mm的串上;EUR匹配2mm和欧元 但字符串2mm不匹配 但是为什么呢?我以为*意味着零次或更多次? 你能帮助我吗? 谢谢大家! 告诉你想要什么样的结果会是一个更好的方法 如果您希望正则表达式匹配“2mm;EUR”或“2mm;”,则意味着您希望匹配以某种数字开头的字符串(可能是毫秒长度?类似于此),以“;”结尾,最后后跟字符串“EUR” 如果这是您想要的,您的正则表达式应该有一个“;”内,并用“?”(0或1)标记EUR 以下正则表达式将
(.*?)( EUR)\1*
在2mm的串上;EUR
匹配2mm代码>和欧元
但字符串2mm代码>不匹配
但是为什么呢?我以为*
意味着零次或更多次?
你能帮助我吗?
谢谢大家! 告诉你想要什么样的结果会是一个更好的方法
如果您希望正则表达式匹配“2mm;EUR”或“2mm;”,则意味着您希望匹配以某种数字开头的字符串(可能是毫秒长度?类似于此),以“;”结尾,最后后跟字符串“EUR”
如果这是您想要的,您的正则表达式应该有一个“;”内,并用“?”(0或1)标记EUR
以下正则表达式将匹配这两种情况,2mm;EUR
以及2mm代码>
(.*?;\s)(EUR)|(.*;)
是的,你是对的*
表示“零次或多次”。您似乎不明白的是\1
。它的意思是“第一组捕获的内容”
因此,正则表达式(.*)(EUR)\1*
表示:
任何字符串,后跟四个字母EUR
(带空格),后跟字符串开头的零倍或更多倍
如果字符串2mm;2毫米欧元;2毫米代码>,(.*)
将匹配2 mm代码>,(EUR)
将匹配EUR
,\1*
将匹配2毫米;2毫米代码>
现在您理解了错误,您将更容易找到正确的表达式。只需删除\1
(.*?)( EUR)*
将匹配任何内容,后跟零次或多次EUR
^(.*?)( EUR.*)?$
将匹配“EUR”之前的任何内容,如果缺少,则匹配整个字符串。注意,我们添加了开始和结束标记,以确保在没有EUR时捕获整个字符串 因为那串里没有EUR
,但后面有“*”吗?表示0个或更多匹配项?量词应用于它前面的标记。在这种情况下,点
。如果您想将EUR
设置为可选,请在(EUR)?
之后再打一个问号<代码>?
:零次或一次。为什么有\1*
。EUR
可以多次出现吗?是的,“EUR”可以多次出现……谢谢!我希望的结果是:如果发现“EUR”比返回之前的所有内容都要多,如果没有,那么结果都是“mm”和“ar”不确定。。。唯一确定的是“欧元”,但它也可以像“4mm 7,50欧元”,这不完全是我搜索的。。。我会在(EUR)之前得到所有的东西,如果它不存在,那么返回所有的东西……两个Questes,以确保这是正确的正则表达式:如果EUR在字符串的中间,那么正确的忽略所有的内容是正确的吗?是否保证在EUR之前有一个空间。
^(.*?)( EUR.*)?$