php - Regex group include if condition -


i have try use regex /^(\s+)(?:\?$|$)/

with yolo , yolo?

works both on second string (yolo?) ? include on capturing group (\s+).

it's bug of regex or have made mistake?

edit: don't want '?' included on capturing group. sry bad english.

you can use

  • if want capture can't have ? in it, use negated character class [^...] (see demo here):

    ^([^\s?]+)\??$ 
  • if want capture can have ? in (for example, yolo?yolo? , want yolo?yolo), need make quantifier + lazy adding ? (see demo here):

    ^(\s+?)\??$ 
  • there btw no need capturing group here, can use look ahead (?=...) instead , @ whole match (see demo here):

    ^[^\s?]+(?=\??$) 

what happening

the rules are: quantifiers (like +) greedy default, , regex engine return first match finds.

considers means here:

  • \s+ first match in yolo?, engine try match (?:\?$|$).
  • \?$ fails (we're @ end of string, try match empty string , there's no ? left), $ matches.

the regex has succesfully reached end, engine returns match \s+ has matched string , in first capturing group.

to match want have make quantifier lazy (+?), or prevent character class (yeah, \s character class) matching ending delimiter ? (with [^\s?] example).


Comments

Popular posts from this blog

javascript - RequestAnimationFrame not working when exiting fullscreen switching space on Safari -

Python ctypes access violation with const pointer arguments -