【问题标题】:RegEx Extract first letter of words but not digits in stringRegEx 提取单词的第一个字母,但不提取字符串中的数字
【发布时间】:2015-01-28 22:00:50
【问题描述】:

我被困在 PHP/RegEx 行。

我想要达到的目标如下:

我有一个字符串

“我的新项目 2015”

我想要实现的是,在 RegEx 之后它看起来像这样:

“Mnp2015”

所以它应该从字符串的每个单词中提取第一个字母,而不是第一个数字或完全删除数字。

我已经得到了 “Mnp2”,但似乎无法弄清楚如何“忽略”这些数字。

使用以下 RegEx atm:"/(?

请帮助 - 非常感谢!

【问题讨论】:

  • “test1234”是否更改为“t1234”或“test1234”?

标签: php regex


【解决方案1】:

您在/(?<=\D\s|^)[a-z]/i 上面使用的正则表达式不适用于 PCRE 正则表达式,因为后视不是固定宽度。至少,这是我尝试时遇到的错误。在这种情况下,简单地断言一个单词边界会更容易:

/\b([a-zA-Z]|\d+)/g

这匹配以字母开头的每个单词的第一个字符,同时匹配任意数量的数字。 See Regex 101 demo here.

如果您需要匹配 Unicode 字母和数字,那么您可以执行以下操作:

/\b(\p{L}|\p{N}+)/g

【讨论】:

    【解决方案2】:

    扩展用于捕获数字的正则表达式应该可以。

    (?<=\D\s|^)([a-z]|\d*)
    

    【讨论】:

      【解决方案3】:
      (?:^|(?<=\s))([a-zA-Z])[a-zA-Z]+\s*
      

      试试这个。替换为$1\1。查看演示

      https://regex101.com/r/pM9yO9/4

      【讨论】:

        【解决方案4】:
        $title = 'My new project 2015 test1234';
        $result = preg_replace('/(?:([a-z])[^ ]*(?: |$)| )/i', '$1', $title);
        echo $result;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-08
          相关资源
          最近更新 更多