編輯:修訂,允許負數如問題編輯完
規定如果這些是有效值:
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,啊,對不起,我讀了「評估」你說的「驗證」的地方。別管我的評論。 –