RegEx提取字母的第一个字母,但不提取字符串中的数字

时间:2015-01-28 12:39:18

标签: php regex

我被困在PHP / RegEx系列。

我想要实现的目标如下:

我有一个字符串

"我的新项目2015"

我想要达成的目标是在RegEx看起来像这样:

" Mnp2015"

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

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

使用以下RegEx atm:" /(?< = \ D \ s | ^)[a-z] / i"

请求帮助 - 非常感谢!

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

(?:^|(?<=\s))([a-zA-Z])[a-zA-Z]+\s*

尝试使用$1\1替换。请参阅演示

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

答案 3 :(得分:0)

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