(Подоплекой этого вопроса является то, что я подумал, что было бы интересно написать что-то, анализирующее креольскую разметку вики. В любом случае, проблема, на решение которой, я думаю, у меня есть, заключается в различении //
в URL и открытии / закрывающий синтаксис для курсивного текста)
Мой вопрос немного сложен, поэтому я попытался разбить его под заголовками
Если существует подстрока (S1), которая может содержать любую из серии подстрок, разделенных |
, интерпретатор регулярного выражения просто совпадает с первой подстрокой в пределах 'S1' и затем переходит на регулярное выражение после 'S1' ? Или может в некоторых случаях попытаться найти лучшее / жадное совпадение?
Вот пример, чтобы попытаться прояснить мой вопрос:
Строка для поиска в пределах: String
Регулярное выражение: /(?:(Str|Strin).*)/
('S1' в моем вопросе относится к не захватывающей подстроке
Я думаю, что совпадения из вышеприведенного должны быть:
0 долларов будет String
1 доллар будет Str
, а не Strin
Будет ли это всегда происходить или это будут случаи (например, может быть, S1 жадно сопоставляется с использованием *), где будет использоваться другая подходящая подстрока, т.е. Strin
в моем примере.
Если вышеизложенное верно, то могу ли я / я должен полагаться на это поведение?
Пример из реального мира
/^\/\/(\b((https?|ftp):\/\/|mailto:)([^\s~]*?(?:~(.|$))?)+?(?=\/\/|\s|$)|~(.|$)|[^/]|\/([^/]|$))*\/\//
Должно соответствовать:
//Some text including a http//:url//
С $ 1 == Some text including a http//:url
Примечание: я пытался сделать это относительно независимым от языка, но я буду использовать php