$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.
答案 0 :(得分:2)
您可以将.
中的.{0,500}
更改为(?:[^<]|<[^>]*>)
。
(?: )
是一个没有捕获的正则表达式组(普通( )
也会捕获它匹配的字符串。)
<
和>
只是匹配自己。
[^>]*
匹配0个或更多非>
个字符。
实际上,不是匹配“任何字符”(.
),而是匹配
<
)或
<...>
组(由<
组成,后跟0个或多个非>
个字符,后跟>
)答案 1 :(得分:1)
试试这个:
$regLinks = "~meaning+?(?:[^<]|<[^>]*>){0,500}\\.~siU";
我保留了{0,500}
位,因为我认为你有理由这样做,尽管写起来效率稍高:
$regLinks = "~meaning+?(?:[^<]+|<[^>]*>){0,500}\\.~siU";
然而,这可能会消耗任意多个字符。