[英]PHP Regex IF THEN pattern
我是刚开始编写Regex模式的新手,并且正努力理解为什么以下行不起作用。
/^(£)?[0-9]+(?(?=\.[0-9]{2}){0,1}(p)?|$)/
注意:我是用PHP编写的
我希望代码查找3.10英镑,而不是3英镑。 本质上,除非带小数点和2位数字,否则不允许使用字母'p'。
编辑:为明确起见,字母p可以在字符串的末尾使用,但是,如果字符串包含£和/或小数点,则p必须以点和2位数字开头。
有效输入的更多示例:£3.50 350£350 234p
无效输入:£2p
有人可以解决这个问题,并解释我在这里出了什么问题吗?
谢谢
如果允许0.50p,则可以这样:
^((£?[0-9]+)(?!p)|([0-9]+p?))?(?<!p)(\.[0-9]{2})?p?$
正则表达式保存了您所有的示例: https : //regex101.com/r/rE1bT9/3
试试这个:/ /^(?(?=£)(£\\d+\\.\\d{2}p?|£\\d+)|\\d+p?)$/
您可以在这里进行测试: https : //regex101.com/r/mG8kR0/1
尚不清楚您的有效样本“ 234p”如何与规则“如果至少有两位数和一个点允许p”匹配。 但是,在您的问题中,您正在使用正向超前,这似乎是开销。
您的p规则可以写为: (\\.[0-9]{2}p?)
因此,总的来说,您只需要:/ /^(£)?[0-9]+(\\.[0-9]{2}p?)$/
并且如果您还允许使用“ 234p”,则只需将句点/^(£)?[0-9]+(\\.?[0-9]{2}p?)$/
:/ /^(£)?[0-9]+(\\.?[0-9]{2}p?)$/
在这里尝试: http : //www.regexr.com/
后一个正则表达式为所有有效样本提供正反馈,并且拒绝无效输入。 目前尚不清楚如果只有两位数字会发生什么,并且如果重要的是抓住一些数字,那么应该有更多的括号。
怎么样:
/^(?:£?[0-9]+(?:\.[0-9]{2})?|[0-9]+p?)$)/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.