正则表达式跳过里面小于标志和大于标志

时间:2015-09-28 20:27:12

标签: php regex preg-match-all

$regLinks = "~meaning+?.{0,500}\\.~siU";

我需要最后一个句点,\\.不在符号内,而且大于号<>。所以像<color blue.>这样的东西会被跳过。我如何在正则表达式中实现这一目标?

$string "meaning: sad is when you are unhappy <blue green.> right now.";

^ ---因此,不要停留在<blue green.>,而是停在

meaning: sad is when you are unhappy `<blue green.>` right now.

2 个答案:

答案 0 :(得分:2)

您可以将.中的.{0,500}更改为(?:[^<]|<[^>]*>)

(?: )是一个没有捕获的正则表达式组(普通( )也会捕获它匹配的字符串。)

<>只是匹配自己。

[^>]*匹配0个或更多非>个字符。

实际上,不是匹配“任何字符”(.),而是匹配

  • “正常”字符(不是<

  • <...>组(由<组成,后跟0个或多个非>个字符,后跟>

答案 1 :(得分:1)

试试这个:

$regLinks = "~meaning+?(?:[^<]|<[^>]*>){0,500}\\.~siU";

我保留了{0,500}位,因为我认为你有理由这样做,尽管写起来效率稍高:

$regLinks = "~meaning+?(?:[^<]+|<[^>]*>){0,500}\\.~siU";

然而,这可能会消耗任意多个字符。