繁体   English   中英

PHP Regex IF THEN模式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM