正则表达式捕获<不属于\(... \)块

时间:2017-02-20 14:55:55

标签: php regex

我想编写一个正则表达式,能够捕获第一个<字符,该字符不是以\(开头且以\)结尾的块的一部分。

一些例子:

  1. foo1<foo2<fooooo3应该返回第一个<字符。
  2. \( gzgajk < lmklklml < \) foo1 < foo2应该返回第三个<字符。
  3. \( sss < ljlj\) foo1 \(sqdzadz <jiojuioio\) foo2 < foo3还应该返回第三个<字符。
  4. 我希望使用积极的外观能力,但我没有成功,因为正面看起来应该是固定长度。

    有关该主题的任何线索?

2 个答案:

答案 0 :(得分:3)

您可以匹配\(及其对\)以及其中的任何内容(包括< s),然后使用(*SKIP)(*FAIL)忽略它们,然后匹配任何<现在你将不在分组对中。 e.g。

\\\(.*?\\\)(*SKIP)(*FAIL)|<

您可以在此处详细了解http://rexegg.com/regex-best-trick.html

演示:https://regex101.com/r/mQee39/1

答案 1 :(得分:0)

不知道你想在这里做什么,但看看这个:

$subject ='\( sss < ljlj\) foo1 \(sqdzadz <jiojuioio\) foo2 < foo3';
preg_match ('#([<]{1})#', $subject , $matches, 0, (int)strrpos($subject,')'));
print_r($matches);
  • strrpos()获取最后)的位置,如果没有找到它从位置0开始
  • preg_match()会知道从这个位置看下一个<