【问题标题】:PHP Regex get UPPERCASE NamePHP 正则表达式获取大写名称
【发布时间】:2012-05-04 12:30:38
【问题描述】:

我有这些名字:

John Stuart AGNEW
Magdi Cristiano ALLAM
Josefa AÉNDRÉS BARÉA 
Josefa ANDRES BAREA
Laima Liucija ANDRIKIENĖ

我想获得所有大写字符的名称

例如,对于John Stuart AGNEW,我想获得AGNEW

我遇到了Josefa AÉNDRÉS BARÉA 的问题。我想要AÉNDRÉS BARÉA

我使用了这个正则表达式:(.*) (.[A-Z]{2,100} .[A-Z]{2,100})

有人可以帮忙吗?

【问题讨论】:

    标签: php regex unicode uppercase


    【解决方案1】:

    根据this \p{Lu} 应该匹配任何大写字母。因此,将您的正则表达式替换为如下内容:(.*) (.\p{Lu}{2,100} .\p{Lu}{2,100}) 应该可以工作。

    我做了一些修改,这应该使您的正则表达式更加宽容。 (\p{Lu}{2,100}( \p{Lu}{2,100})?)。但是我没有使用 PHP 的经验,所以我无法正确测试它。

    不过,我已经在 J​​ava 环境中对其进行了测试,它对我有用。

    【讨论】:

    • @mgraph regexr 不适合测试 PHP 正则表达式,Javascript 正则表达式引擎和 PHP 的 PCRE 引擎差别很大,Javascript 不支持 PHP 所做的很多事情。用 PHP 试试吧。
    • 你可以试试这个吗? solmetra.com/scripts/regex/index.php 专门用于 php - 我正在尝试这个正则表达式 #\b\p{Lu}+\b#,它不断将 AÉNDRÉS 拆分为 AÉNDR 和 ÉS,这太荒谬了 - 你知道为什么吗?
    • @EvanMulawski:目前我正试图让它工作,但这与 OP 发布的正则表达式相同。
    • @npinti 它的作品,但如果名称只有一个大写的单词它没有显示,我应该添加 OR |
    • 我做了:#\b(.*) ((.\p{Lu}{2,100} .\p{Lu}{2,100})|(.\p{Lu}{2,100}))\b#
    【解决方案2】:

    我会使用:

    ([A-ZÁÉÍÓÚÜ]{2,})
    

    然后使用以下方法连接匹配项:

    $result = implode(" ", $matches);
    

    【讨论】:

      【解决方案3】:

      我试过了,可能是你需要的

      <?php
      
      $s = 'John Stuart AGNEW
      Magdi Cristiano ALLAM
      Josefa AÉNDRÉS BARÉA
      Josefa ANDRES BAREA
      Laima Liucija ANDRIKIENE
      Ronald McDONALD
      ';
      
      $pat = "/\p{Lu}{2,}.*/";
      preg_match_all( $pat, $s, $ms);
      
      foreach( $ms[0] as $m){
          echo $m . "<br />\n";
      }
      
      ?>
      

      注意,像 McDONALD 这样的一些名字是混合大小写的,你也支持这些吗?

      【讨论】:

        【解决方案4】:

        您的第一个 (.*) 应该是非贪婪的,例如:(.*?),这样它就不会开始接受来自名称大写部分的字母。

        然后正如其他人提到的,您可以将范围 [A-Z] 扩展到 [A-ZÁÉÍÓÚÜ]

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-03
          • 1970-01-01
          • 2017-02-13
          • 1970-01-01
          • 2013-09-10
          • 1970-01-01
          • 2018-07-20
          • 2010-10-25
          相关资源
          最近更新 更多