Why doesn’t this regex match white space on text between parentheses?
((?:((s>)|(s{2,})|(s))))
The text below it that isn’t enclosed in parenthesis should be ignored. It’s just there. No need to worry with that. Only the ones in parentheses need to be touched.
( R:2379; L: 28 ) //replace to (R:2379;L:28) R:2379;L:28 (R:2432;L:28) // ok, no replacements needed R:2432; L:28 ( R : 2475; L: 28 ) // replace to (R:2475;L:28) R:2475; L:28 ( R : 2480 ; L:28 ) // replace to (R:2480;L:28) R:2480; L:28
Edit:
( R:2379; L: 28 ) //replace to (R:2379; L:28) #a single space is ok, except before or after a parentheses. Multiple spaces are reduced to blank. (R:2432;L:28) // ok, no replacements needed (R:2432; L: 28) // ok, no replacements needed. The single spaces are not before or after the parentheses ( R : 2475; L: 28 ) // replace to (R:2475; L:28) #the single space before the L is fine. other multiple spaces are blanked ( R : 2480 ; L: 28 ) // replace to (R:2480; L: 28) #the single space before the 28 is fine
Advertisement
Answer
You can use
preg_replace('/(?:G(?!A)|()[^()]*?K(?:(?<=()s+|s+(?=))|s{2,})(?=[^()]*))/', '', $string)
See the regex demo. Details:
(?:G(?!A)|()– either the end of the previous match or([^()]*?– zero or more chars other than(,), as few as possibleK– omit the text matched so far(?:(?<=()s+|s+(?=))|s{2,})– 1+ whitespaces right after(, or 1+ whitespaces right before(, and any two or more whitespace characters(?=[^()]*))– that are followed with any 0 or more chars other than(and)and then a).