我想编写一个正则表达式,能够捕获第一个<
字符,该字符不是以\(
开头且以\)
结尾的块的一部分。
一些例子:
foo1<foo2<fooooo3
应该返回第一个<
字符。\( gzgajk < lmklklml < \) foo1 < foo2
应该返回第三个<
字符。\( sss < ljlj\) foo1 \(sqdzadz <jiojuioio\) foo2 < foo3
还应该返回第三个<
字符。我希望使用积极的外观能力,但我没有成功,因为正面看起来应该是固定长度。
有关该主题的任何线索?
答案 0 :(得分:3)
您可以匹配\(
及其对\)
以及其中的任何内容(包括<
s),然后使用(*SKIP)(*FAIL)
忽略它们,然后匹配任何<
现在你将不在分组对中。 e.g。
\\\(.*?\\\)(*SKIP)(*FAIL)|<
您可以在此处详细了解http://rexegg.com/regex-best-trick.html。
答案 1 :(得分:0)
不知道你想在这里做什么,但看看这个:
$subject ='\( sss < ljlj\) foo1 \(sqdzadz <jiojuioio\) foo2 < foo3';
preg_match ('#([<]{1})#', $subject , $matches, 0, (int)strrpos($subject,')'));
print_r($matches);
)
的位置,如果没有找到它从位置0开始<
。