$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,500}
中的.
更改为(?:[^<]|<[^>]*>)
。
(?: )
是一个不捕获的正则表达式组(普通( )
也会捕获它匹配的字符串(。
<
和>
只是匹配自己。
[^>]*
匹配 0 个或多个非>
字符。
实际上,我们匹配的不是"任何字符"(.
(,而是匹配
- 一个"正常"的角色(不
<
(
或
- 一个
<...>
组(由一个<
组成,后跟0个或多个非>
字符,后跟>
(
试试这个:
$regLinks = "~meaning+?(?:[^<]|<[^>]*>){0,500}''.~siU";
我保留了{0,500}
位,因为我认为您有理由这样做,尽管编写会更有效率:
$regLinks = "~meaning+?(?:[^<]+|<[^>]*>){0,500}''.~siU";
但是,这可能会消耗任意许多字符。