【问题标题】:Split words between UPPER CASE and lower case在大写和小写之间拆分单词
【发布时间】:2015-05-05 13:53:06
【问题描述】:

如果有人可以帮助我,那就太棒了!

我有这个:

TYLLON kevin -convert-> 姓氏:TYLLON;姓名:kevin

VAN AZERTY bert -convert-> 姓氏:VAN AZERTY;姓名:bert

YAHOO BE AWESOME rabbit -convert-> 姓氏:YAHOO BE AWESOME;姓名:rabbit

也许是正则表达式,有人吗?

【问题讨论】:

  • 向我们展示您的尝试,我们可以向您展示如何改进它或查看您的错误所在
  • 也许这个链接会对你有所帮助:stackoverflow.com/questions/9301415/…
  • @JonasLibbrecht SO 不是您要求其他人为您编写代码的服务。它用于就您在编码时遇到的问题提出问题。
  • @JonasLibbrecht 你读过this 和/或this吗?此外,您认为大多数程序员是如何做到的?他们当然不会针对他们遇到的每一个问题发布关于 SO 的问题。大脑和良好的搜索引擎的结合是更为常见的工具。
  • @Biffen Easy 老兄,我想他明白了。这不是“为我做”服务,而是帮助解决现有代码问题的服务。由于他没有代码,我认为这是题外话。

标签: php regex


【解决方案1】:

我相信最短的答案是在此处使用 preg_split 并使用环视:

使用此正则表达式进行拆分:

/(?<=\p{Lu})\h+(?=\p{Ll})/u

匹配 1 个或多个水平空格,该空格前面有一个大写 unicode 字母,后跟一个小写 unicode 字母。

PS:此解决方案兼容 unicode。

示例:

print_r(preg_split('/(?<=\p{Lu})\h+(?=\p{Ll})/u', 'YAHOO BE AWESOME rabbit'));
Array
(
    [0] => YAHOO BE AWESOME
    [1] => rabbit
)

print_r(preg_split('/(?<=\p{Lu})\h+(?=\p{Ll})/u', 'VAN AZERTY bert'));
Array
(
    [0] => VAN AZERTY
    [1] => bert
)

print_r(preg_split('/(?<=\p{Lu})\h+(?=\p{Ll})/u', 'TYLLON kevin'));
Array
(
    [0] => TYLLON
    [1] => kevin
)

【讨论】:

    【解决方案2】:

    您可以使用 php 函数 ctype_upper 遍历您的姓名字符串:

    检查提供的字符串 text 中的所有字符是否都是大写字符。

    您首先必须explode() 您的姓名并将它们放入一个数组中。将它们放入数组后,您可以检查大写/小写...

    <?php
    $name_array = array('VAN', 'AZERTY', 'bert');
    foreach ($name_array as $testcase) {
        if (ctype_upper($testcase)) {
            echo "The string $testcase is upper case.";
        } else {
            echo "The string $testcase is lower case / mixed case.";
        }
    }
    ?>
    

    【讨论】:

      【解决方案3】:

      试试这个解决方案。

      <?php
         preg_match_all('/\b([A-Z]+)\b/', $fullname, $upper);
         preg_match_all('/\b([a-z]+)\b/', $fullname, $lower);
         $familyname = implode(' ', $upper[0]);
         $prename = implode(' ', $lower[0]);
         echo $prename.' '.$familyname;
      ?>
      

      【讨论】:

      • 不要使用字符串连接,而是使用逗号。
      【解决方案4】:

      我结合多个答案找到了答案:

      preg_match_all('/\b([A-Z]+)\b/', 'BLA BOEM BABA Kevin', $matches);
      

      结果:BLA BOEM BABA

      preg_replace('/\b([A-Z]+)\b/', '', 'VAN MELKEBEKE BLA BOEM BABA Kevin');
      

      结果:凯文

      【讨论】:

        猜你喜欢
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 2012-04-28
        • 1970-01-01
        • 2017-06-16
        • 1970-01-01
        • 1970-01-01
        • 2016-07-12
        相关资源
        最近更新 更多