编辑:修订,允许负数如问题编辑完
规定如果这些是有效值:
5n+12 3456 -5 2 123n+6 8n 13n-6 n+2
而这些都无效:
25n.1 4x+4 2n+ 6N-2 8n-+5 n+-3 Rn+T x+1
则此表达式应该生效:
^(-?\d+(n([+-]\d+)?)?)$
这个表达式说:
^ # Assert beginning of line
(\d+ # Match one or more digits
(n # TRY to Match a literal n character
(\+\d+ # TRY to match a literal plus character followed by one or more digits
)? # END TRY
)? # END TRY
) # End Match
$ # Assert at end of string
的TRY
旨意尝试验证,但不会介意,如果它不存在。
编辑:
虽然上述表达式应该验证,这种表达应该正是产生你所寻求的结果,使用命名捕获组a
和b
,以及积极超前捕捉只为a
和b
号码并排除+
符号,但仅捕捉负数-
符号:
^(?:(?:(?P<a>-?\d*)n)?(?=[+-]?\d+|$)\+?(?P<b>-?\d+)?)$
结果应为如下:
:
source a b
------ ------ ------
5n+12 5 12
3456 3456
2 2
123n+6 123 6
8n 8
-5 -5
13n-6 13 -6
n+2 2
n
因为我不是完全肯定的<null value or nothing>
VS ,zero length or null string>
二分法PHP和preg_match_all
是如何工作的,如果你遇到的结果之间的区别为n+2
和2
任何问题,我会建议使用这种表达
^(?:(?P<n>(?P<a>-?\d*)n)?(?=[+-]?\d+|$)\+?(?P<b>-?\d+)?)$
此捕获整个“n”的表达或什么,如果没有,对于n+2
,2
和12n+2
,这产生:
source n a b
------ ------ ------ ------
2 2
n+2 n 2
12n+2 12n 12 2
如果提交的表达式与REGEX匹配,它应该返回true并因此通过验证。我对REGEX本身更感兴趣。我在PHP中使用这个。 – linkyndy
请提供可能接近的东西的例子,但不应该通过验证 –
@linkyndy,啊,对不起,我读了“评估”你说的“验证”的地方。别管我的评论。 –