正则表达式找到评估数字模式

时间:2016-08-31 09:30:00

标签: php regex preg-match

我试图创建一个正则表达式来匹配特定的给定数字模式。

模式是:

123456 1234XX 1234*

不允许: 以下组合:1234*X1234X* 或多个*1234**

我已经尝试过这个表达式:

/^[\\+\\#\\*0-9]{0,25}[X]*$/

但在这里,我将多个*1234*X作为有效表达式。

有没有人知道适当的灵魂或解决方法?

修改 好的,我想我应该澄清规则。

正则表达式应匹配任何给定的数字:

012345
+12345
#1234525

但也匹配其中包含X的字符串。

12345X
12345XX
1234XXXXXX
XXXXXX

X应始终位于字符串的末尾。

只应在字符串末尾允许单个*

1234*
1234556*
1*

不允许多个*。字符串末尾只有一个*

不允许X*的组合。 1234X*不被允许。

长度限制:0到25个字符。

3 个答案:

答案 0 :(得分:1)

据我了解你的需要,这可以胜任:

^\d+(?:x+|\*)?$

根据问题编辑的新版本:

^[+#]?\d*(?:x+|\*)?$

答案 1 :(得分:0)

根据您的新更新:

^(?=.)[+#*]?\d*?(?:X+|\*)?$

Live demo

说明:

^           # Asserts beginnig of input string
(?=.)       # Positive looakehad - input string length should be at least 1
[+#*]?      # Optional symbols 
\d*?        # Optional digits (any number)
    (?:         # Start of non-capturing group (a)
        X+          # Any number of X
        |           # Or
        \*          # A single *
    )?          # End of non-capturing group (a) - optional
$           # End of string

答案 2 :(得分:0)

您可以使用

'~^(?=.{0,25}$)[+#]?\d*(?:X*|\*?)$~D'

请参阅regex demo

这将确保整个字符串长度为0到25个字符,并且只允许字符串末尾有一个*,零个或多个X只能跟随0个或更多个数字。

<强>详情:

  • ^ - 字符串开头
  • (?=.{0,25}$) - 检查整个字符串长度的正向前瞻(必须是0到25个字符长)
  • [+#]? - 一个或零+#
  • \d* - 零个或多个数字
  • (?:X*|\*?) - 与两个替代方案中的任何一个匹配的非捕获组:
    • X* - 零个或多个X符号
    • | - 或......
    • \*? - 一个或零*个符号
  • $ - 字符串结尾(最好将其替换为\z,以确保不接受最后的换行符,或者只添加D修饰符)。