EDIT: revised to allow negative numbers as specified in the question END EDIT
Als dit geldige waarden zijn:
5n+12 3456 -5 2 123n+6 8n 13n-6 n+2
En deze zijn ongeldig:
25n.1 4x+4 2n+ 6N-2 8n-+5 n+-3 Rn+T x+1
dan moet deze uitdrukking valideren:
^(-?\d+(n([+-]\d+)?)?)$
Deze uitdrukking zegt:
^ # 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
De TRY
s probeert te valideren, maar het maakt niet uit of het er niet is.
EDIT:
Hoewel de bovenstaande expressie moet worden gevalideerd, moet deze expressie precies de resultaten opleveren die u zoekt, met behulp van benoemde capturinggroepen a
en b
en een positieve lookahead om alleen de getallen voor < code> a en b
en om het +
-symbool uit te sluiten, maar alleen het -
-symbool voor negatieve getallen vast te leggen:
^(?:(?:(?P-?\d*)n)?(?=[+-]?\d+|$)\+?(?P-?\d+)?)$
Resultaten moeten als volgt zijn:
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
Because I am not completely sure how the
vs ,zero length or null string>
dichotomy works in PHP and preg_match_all
, I would recommend using this expression if you encounter any problems differentiating between the results for n+2
and 2
:
^(?:(?P(?P-?\d*)n)?(?=[+-]?\d+|$)\+?(?P-?\d+)?)$
Hiermee wordt de volledige "n" -uitdrukking of niets vastgelegd als er geen is, voor n + 2
, 2
en 12n + 2
produceert dit :
source n a b
------ ------ ------ ------
2 2
n+2 n 2
12n+2 12n 12 2