Я пытаюсь сопоставить только первый экземпляр ":" в строке текста, которая может иметь 1 или более вхождений.
Пример содержания:
title: This is a title: This is a subtitle
Поэтому я хочу сопоставить только ":" после "title"
Я пробовал это:
/(: ?)/
Но он все еще соответствует всем им.
Я знаю, что это должно быть не жадным, используя ? но до сих пор он кажется просто не жадным, но при этом соответствует многочисленным вхождениям в данной строке.
Спасибо за любую помощь :)
ОБНОВЛЕНИЕ 20160823 в 13:50
Ниже приведен пример контента, который я анализирую:
root
parent
title: The title with (: ) to be ignored
text: A line of text
Таким образом, «:», скорее всего, будет предваряться отступом, а слово перед первым «:» может быть любым.
Решение @ 27.01.2017
Итак, это, кажется, работает:
$text = " title: Page: Website - Tagline";
preg_match("~^(?:[\t ]+)*(?:([\w]+)(?:: ){1})([\s\S]+)$~", $text, $matches);
$matches[1]; // title
$matches[2]; // Page: Website - Tagline
Text:title: text2 subtitle
- person Wiktor Stribiżew   schedule 23.08.2016(?m)^(?:(?!: ).)*(: )
- person Aran-Fey   schedule 23.08.2016preg_match('#:\s*#', $input, $match)
не сложно, но это выглядит проблемой XY. - person Wiktor Stribiżew   schedule 23.08.2016