替换所有不是正则表达式中的字母的起始字符

时间:2015-11-30 22:27:07

标签: php regex preg-replace

我需要替换所有不是字母的起始字符,但我的正则表达式模式正在替换所有字符。我该如何解决这个问题?

$text = "!@#$%^text!@#$%^";
$text = preg_replace("~[^\w]~", "", $text);

echo $text;

结果:

text

需要结果:

text!@#$%^

1 个答案:

答案 0 :(得分:6)

问题是你使用的preg_replace替换了字符串中的所有匹配项,而你只需要在字符串的开头只删除一系列非单词字符。

使用锚点和量词:

$text = preg_replace('~^[^\w]+~', "", $text);

或者使用\W代替[^\w](因为它匹配相同的字符集)以缩短正则表达式:

$text = preg_replace('~^\W+~', "", $text);

请参阅IDEONE demo

说明:

  • ^ - 字符串开头
  • [^\w]+ - 除了单词(*)字符以外的1个或多个字符([a-zA-Z0-9_])。

要匹配数字和非单词字符,只需创建字符类 [\W\d]

'~^[\W\d]+~'

这是regex demo

字符类将匹配\W(非单词字符)或\d(数字),1次或多次(由于+)。