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

时间:2015-09-15 22:45:37

标签: php html regex uppercase

我正在尝试创建正则表达式以在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>

然而它无法正常工作。它缺少空格和带有重音的字母。

3 个答案:

答案 0 :(得分:1)

您似乎有一个非常具体的案例。 @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);

如果你想抓住任何跨度的内容,你可以使用这样的东西:

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

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

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

答案 1 :(得分:0)

您使用的[A-Z]仅匹配AZ。这可以使用Unicode categories

来解决
  1. 使用\p{Lu}将字符与Uppercase_Letter Unicode属性匹配。
  2. 要使用上述内容,请在模式中设置/u(Unicode修饰符)。
  3. 不要忘记包含空格(您的示例有1个)。
  4. 这符合您的要求:[\p{Lu} ]+

    <强>代码:

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

    Demo online

答案 2 :(得分:0)

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

保持简单:

只需在角色类中添加您想要的特殊字符。例如,我猜测它是Portuguese你匹配的:

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