我被困在PHP / RegEx系列。
我想要实现的目标如下:
我有一个字符串
"我的新项目2015"
我想要达成的目标是在RegEx看起来像这样:
" Mnp2015"
所以它应该从字符串的每个单词中提取第一个字母,而不是第一个数字或完全删除数字。
我已经得到了" Mnp2" ,但似乎无法弄清楚如何"忽略"数字。
使用以下RegEx atm:" /(?< = \ D \ s | ^)[a-z] / i"
请求帮助 - 非常感谢!
答案 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)
答案 3 :(得分:0)
$title = 'My new project 2015 test1234';
$result = preg_replace('/(?:([a-z])[^ ]*(?: |$)| )/i', '$1', $title);
echo $result;