@@ -165,23 +165,25 @@ private function buildPatterns(): void
165165
166166 // Inline pattern: combined alternation
167167 // Order matters: ''' before '', ** before *, etc.
168+ // NOTE: /U flag makes quantifiers ungreedy by default,
169+ // so .+ is lazy (non-greedy) and .+? is greedy.
168170 $ this ->inlinePattern = '/(?: '
169- . "'''(.+? )''' " // group 1: bold (triple quote)
170- . "|''(.+? )'' " // group 2: italic (double quote)
171- . '|\*\*(.+? )\*\* ' // group 3: strong
172- . '|\/\/(.+? )\/\/ ' // group 4: emphasis
173- . '|__(.+? )__ ' // group 5: underline
174- . '|\{\{(.+? )\}\} ' // group 6: monospace
175- . '|\^\^(.+? )\^\^ ' // group 7: superscript
176- . '|,,(.+? ),, ' // group 8: subscript
177- . '|##([a-zA-Z0-9#]+)\|(.+? )## ' // groups 9,10: colortext
178- . '|@@(.+? )@@ ' // group 11: revise
171+ . "'''(.+)''' " // group 1: bold (triple quote)
172+ . "|''(.+)'' " // group 2: italic (double quote)
173+ . '|\*\*(.+)\*\* ' // group 3: strong
174+ . '|(?<!:) \/\/(.+)\/\/ ' // group 4: emphasis (negative lookbehind avoids : // in URLs)
175+ . '|__(.+)__ ' // group 5: underline
176+ . '|\{\{(.+)\}\} ' // group 6: monospace
177+ . '|\^\^(.+)\^\^ ' // group 7: superscript
178+ . '|,,(.+),, ' // group 8: subscript
179+ . '|##([a-zA-Z0-9#]+)\|(.+)## ' // groups 9,10: colortext
180+ . '|@@(.+)@@ ' // group 11: revise
179181 . '| _\n ' // group 12 implicit: line break
180182 . '|\[(\w+:\/\/[^\]\s]+)(?:\s+([^\]]+))?\] ' // groups 12,13: url
181183 . '|\[([A-Za-z][-\w\/]*(?:#[-\w:.]+)?)(?:\s+([^\]]+))?\] ' // groups 14,15: wikilink [Page text]
182184 . '|\(\(([^\)]+)\)\) ' // group 16: freelink
183- . '|\[\[php\s+(.+? )\]\] ' // group 17: phplookup
184- . '|(?<![A-Za-z0-9\-_])(!)?((?:[A-Z][A-Za-z0-9]*? [a-z0-9]+? [A-Z][A-Za-z0-9]*? )(?:\/(?:[A-Z][A-Za-z0-9]*? [a-z0-9]+? [A-Z][A-Za-z0-9]*? ))*? )(?![A-Za-z0-9\-_\/]) ' // groups 18,19: CamelCase wikilink
185+ . '|\[\[php\s+(.+)\]\] ' // group 17: phplookup
186+ . '|(?<![A-Za-z0-9\-_])(!)?((?:[A-Z][A-Za-z0-9]*[a-z0-9]+[A-Z][A-Za-z0-9]*)(?:\/(?:[A-Z][A-Za-z0-9]*[a-z0-9]+[A-Z][A-Za-z0-9]*))*)(?![A-Za-z0-9\-_\/]) ' // groups 18,19: CamelCase wikilink
185187 . ')/Us ' ;
186188 }
187189
0 commit comments