Regex查找评估数字模式


Regex to find evaluate number pattern

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

模式如下:

1234561234XX1234*

不允许有:A组合如:1234*X1234X*或多个*: 1234**

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

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

但是这里我得到了多个*1234*X作为有效表达式。

有没有人有合适的解决方案或解决方案的方法?

编辑:

好的,我想我应该澄清一下规则。

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

012345
+12345
#1234525

还可以匹配包含X的字符串。

12345X
12345XX
1234XXXXXX
XXXXXX

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

单个*应该只允许出现在字符串的末尾。

1234*
1234556*
1*

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

不允许X*的组合。不允许使用1234X*12345*X

长度限制:0 ~ 25个字符

就我所了解的您的需求而言,这样就可以了:

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

根据问题编辑新版本:

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

可以使用

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

参见regex demo

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

:

  • ^ -字符串
  • 起始
  • (?=.{0,25}$) -一个正向前看检查整个字符串长度(必须从0到25个字符长)
  • [+#]? - 1或0 +#
  • 'd* - 0或多个数字
  • (?:X*|'*?) -一个非捕获组匹配2个备选方案中的一个:
    • X* -零或多个X符号
    • | - or…
    • '*? -一个或零*符号
  • $ -字符串结束(最好将其替换为'z,以确保末尾不接受换行符,或者只添加D修饰符)

基于您的新更新:

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

现场演示

解释:

^           # 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