PHP REGEX查找html标记中的大写句子


PHP REGEX to find uppercase sentence in html tag

我试图创建正则表达式在html标签中找到大写句子。下面是一个例子:

<span style="font-family:Arial; font-size:11pt; font-weight:bold">RESSONÂNCIA MAGNÉTICA</span></p>

我得到这个正则表达式:^<span style="font-family:Arial; font-size:11pt; font-weight:bold">+[A-Z]+<'/span><'/p>

但是它不能正常工作。它缺少空格和重读字母。

你似乎有一个非常具体的情况。@Mariano指出了一种抓取大写字符的好方法,它是unicode安全的(干得好!),但也许以不同的方式来处理这个问题会有所帮助。

你提到想要大写句子…我认为这不仅仅是大写字母,还包括标点符号,以及所有其他字符。想想哪里不好?如果标签内不允许包含小写字母,也许你的匹配(在标签内)是[^a-z]+,它将匹配从a到z的所有非小写字母。

preg_replace("/^<span style='"font-family:Arial; font-size:11pt; font-weight:bold'">([^a-z]+)<'/span><'/p>/u", "'1", $input_lines);

如果你想获取任意span的内容,你可以这样写:

preg_replace("/^<span[^>]+>([^a-z]+)<'/span>/u", "'1", $input_lines);

或者处理带有重音的小写字母:

preg_replace("/^<span[^>]+>([^'{Ll}]+)<'/span>/u", "'1", $input_lines);

您使用的[A-Z]只匹配AZ。这可以使用Unicode分类

来解决
  1. 使用'p{Lu}Uppercase_Letter Unicode属性匹配字符。
  2. 为了使用上面的,在你的模式中设置/u (Unicode修饰符)。
  3. 不要忘记包括空格(你的例子有1)。

这将匹配你想要的:['p{Lu} ]+

代码:

preg_replace("/^<span style='"font-family:Arial; font-size:11pt; font-weight:bold'">(['p{Lu} ]+)<'/span><'/p>/u", "'1", $input_lines);
演示在线

我建议在之前的回答中使用'p{Lu},但您可能对匹配阿拉伯语,德语特殊字符或任何Uppercase_Letter类别匹配不感兴趣。

保持简洁:

只需在字符类中添加您想要的特殊字符。例如,我猜你匹配的是葡萄牙语:

[A-ZÁÂÃÀÇÉÊÍÓÔÕÚ ]+