Я хотел бы написать регулярное выражение, способное захватить первый <
символ, который не является частью блока, начинающегося с \(
и заканчивая \)
,
Некоторые примеры:
foo1<foo2<fooooo3
должен вернуть первый <
персонаж.\( gzgajk < lmklklml < \) foo1 < foo2
должен вернуть третий <
персонаж.\( sss < ljlj\) foo1 \(sqdzadz <jiojuioio\) foo2 < foo3
должен также вернуть третий <
персонаж.Я искал возможность использовать позитивный взгляд за способностью, но у меня ничего не получалось, так как позитивный взгляд должен быть фиксированной длины.
Любая подсказка по теме?
Вы можете соответствовать \(
и его пара \)
и все что между <
s) затем игнорировать их (*SKIP)(*FAIL)
затем сопоставьте любой <
и теперь вы не в сгруппированной паре. например
\\\(.*?\\\)(*SKIP)(*FAIL)|<
Вы можете прочитать больше об этом здесь, http://rexegg.com/regex-best-trick.html.
Демо-версия: https://regex101.com/r/mQee39/1
Не знаю, чего вы хотите достичь здесь, но посмотрите на это:
$subject ='\( sss < ljlj\) foo1 \(sqdzadz <jiojuioio\) foo2 < foo3';
preg_match ('#([<]{1})#', $subject , $matches, 0, (int)strrpos($subject,')'));
print_r($matches);
)
, если ничего не найдено, начинается с позиции 0<
,