w 不够匹配,我应该用什么来代替


w doesn't match enough, what should I use instead?

(在PHP中(我有以下字符串:

$string = '<!--:fr--><p>Mamá lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ut est et tortor sagittis auctor id ut urna. Etiam quañ justo, pharetra sed bibendum at, vulputate et augue.</p> <p>Curabitur cursus mi vel quam placerat malesuada. Fusce euismod mollis tincidunt. Sed cursus, sem et porta dictum, elit purus facilisis massa, eget consectetur nisi libero eget leo. Vivamus vitae mattis nulla. varius fermentum.</p><!--:-->'

我想使用 消除<!--:fr--><!--:-->

preg_replace('/<!--:[a-z]{2}-->('w+)<!--:-->/', '${1}', $string)

但它返回相同的$string。问题出在哪里?

您有超出[a-zA-Z0-9_]的字符(这是'w匹配的(。您可以与 ['s'S] 匹配,这意味着任何空格或非空格字符(即所有字符(。

您也可以将.s标志一起使用。

试试这个...

preg_replace('/<!--:[a-z]{2}-->(['s'S]+?)<!--:-->/', '${1}', $string);

艾德奥内。

另一种可能性是你只是删除了你不想要的部分。

preg_replace('/<!--:(?:[a-z]{2})?-->/', '', $string);

这仅匹配您不需要的部分<!--:(?:[a-z]{2})?-->其中(?:[a-z]{2})?是两个可选的小写字母,这意味着它将匹配两个部分。

要解决您的问题,您只需要一个简单的正则表达式(如 <!--:(fr)?-->(和 PHP 代码(如(:

$string = preg_replace('/<!--:(fr)?-->/', '', $string);

回答这个问题:'w是一个非常有限且不推荐的快捷方式。例如,它不会匹配您输入的ñ,也不会匹配,。PHP 对 Unicode 有很好的支持。快捷方式'p{L}匹配任何语言的任何字母。还有任何标点符号等的快捷方式。这些可以组合在一个字符类中。例如,如果您想按任何顺序匹配至少一个字母(包括法语和西班牙语字母(、点或逗号,您可以写:

['p{L}.,]+

这里有一些关于它如何工作的信息:

  • http://www.regular-expressions.info/unicode.html