【发布时间】:2012-04-20 15:06:01
【问题描述】:
为什么我的正则表达式没有去掉句点?最终结果应该只输出字母和数字字符,加上“-”,但我不断在输出中得到句点。我试过 trim($string, '.') 但没有用。请帮忙!
更新!我已经用正确的解决方案更新了代码。谢谢!
<?php
protected $trimCharacters = "/[^a-zA-Z0-9_-]/";
protected $validWords = "/[a-zA-Z0-9_-]+/";
private function cleanUpNoise($inputText){
$this->inputText = preg_replace($this->trimCharacters, '', $this->inputText);
$this->inputText = strtolower($this->inputText);
$this->inputText = preg_match_all($this->validWords, $this->inputText, $matches);
return $matches;
}
?>
【问题讨论】:
-
会删除所有非字母数字或 - 字符暗示删除空白字符、冒号和 + 吗?因此,删除与您的
$splitPattern匹配的所有内容将不那么有意义,因为您的下一步,您的$trimCharacters暗示$splitPattern? -
隐含是什么意思?
-
你是对的,但即使删除了 $splitPattern,我的正则表达式仍然让 ." 通过。如果我在 regexpal.com 上测试它,它说它应该可以工作。
-
对不起,我的英语出错了。必须是“牵连”。隐式意味着它是包含的。所以
/[\s,\+]+/删除了这些类型的字符......而/[^\w-]/g删除了所有非字母数字或'-'......所以[\s,\+]+删除的所有字符也将被/[^\w-]/g删除。我认为如果你改变它们的顺序会很清楚......如果你首先在你的字符串上运行/[^\w-]/g,那么字符串中将不再有任何空格、冒号或加号,那么为什么要在字符串上运行[\s,\+]+?它已经无能为力了,因为 [^\w-] 暗示了它。