jes*_*ica 1 php regex preg-replace
我需要替换所有不是字母的起始字符,但我的正则表达式模式正在替换所有字符.我该如何解决?
$text = "!@#$%^text!@#$%^";
$text = preg_replace("~[^\w]~", "", $text);
echo $text;
Run Code Online (Sandbox Code Playgroud)
结果:
text
Run Code Online (Sandbox Code Playgroud)
需要结果:
text!@#$%^
Run Code Online (Sandbox Code Playgroud)
问题是你正在使用preg_replace它替换字符串中的所有匹配项,而你只需要在字符串的开头只删除一系列非单词字符.
使用锚点和量词:
$text = preg_replace('~^[^\w]+~', "", $text);
Run Code Online (Sandbox Code Playgroud)
或者使用\W而不是[^\w](因为它匹配同一组字符)来缩短正则表达式:
$text = preg_replace('~^\W+~', "", $text);
Run Code Online (Sandbox Code Playgroud)
请参阅IDEONE演示
说明:
^ - 字符串的开头[^\w]+- *除了单词([a-zA-Z0-9_])字符以外的1个或多个字符().要匹配数字和非单词字符,只需创建一个字符类 [\W\d]:
'~^[\W\d]+~'
Run Code Online (Sandbox Code Playgroud)
这是一个正则表达式演示
字符类将匹配\W(非单词字符)或\d(数字),1次或多次(由于+).