For a silly bbcode parser I wanted to add two definitions into one, my original definition was this for preg_replace:
'#\[s\](.*?)\[/s\]#si', '<strike>\\1</strike>'
And this works, I wished for the user to be able to use either [s] or [strike] to initiate text in that format, so I naturally added something like this thinking it would work:
'#\[(s|strike)\](.*?)\[/(s|strike)\]#si', '<strike>\\1</strike>'
Unfortunately that fails, instead of what you would expect, both [s] and [strike] (used properly) make: and s (my markdown is correct to show its real looking result, it shows s or strike regardless of what is inside it)strike
Why does it replace the inner text with the tag name instead? Is my adding parentheses around the s|strike the problem? I am probably doing this all wrong..
(.)\1into his backtracking NFA code ingrep: the language described by(.)\1is not REGULAR in that st00pid textbook REGULARity definition that nobody uses and which does not apply to modern regexes.egrepcan match(.)\1, which is not REGULAR. See here, here, and here — &c&c&c!\((?:[^()]*+|(?0))*\)is a beautiful regex.