正则表达式跳过小于号和大于号内的句点


Regex skipping periods inside of less than sign and greater than sign

$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";

但是,这可能会消耗任意许多字符。