匹配任何字符包围的单词,除了任何有效单词或单词的一部分

时间:2012-09-06 14:16:32

标签: php regex preg-match

我手头有这个小任务。我需要匹配由以下任何字符包围的单词[\ n \ r \ t!@#\ $%* \ ^()_。,]。

很抱歉让我清楚这一点。截至目前,我可以匹配“收件人”,“转换为”,“$ to $”,“#To#”。但是,如果我使用下面的代码搜索“To_Lee”,它找不到它。我需要能够匹配“To_Lee”但忽略其中包含“to”的任何单词,如“番茄”。

$string = 'This is a random string that contains To_Lee';
preg_match('/\b(_*(to)_*)\b/i', $string, $matches);

除To_Lee外,所有情况都会返回true。有人可以告诉我我需要做什么,以便它可以捕获To_Lee作为有效匹配吗?

对于这种混乱感到抱歉,希望这有点清楚。

再次感谢。

1 个答案:

答案 0 :(得分:0)

我想我找到了自己问题的答案。在我的环境中测试代码后,我得到了我期待的结果。

在向阿列克谢解释我想要的内容之后,我基本上得到了答案。

以下是代码:

$string = 'This is a very long string, that contains Sam. sam is just as bad. Not sure what I need but i think it feels the same. Sam_Alex is the same as Alex_Sam. Alex is the same as well..';

基本上我们希望将不是字母的任何内容与括号中的指定字符串进行匹配。在上面的字符串中,您注意到我添加了“same”这个词,类似于“sam”。但是,这个词完全被忽略了,在这种情况下我们想忽略“相同”。

$pattern = '([^a-zA-Z])(_*(Sam)_*)([^a-zA-Z])';
preg_match($pattern, $string, $matches);

给我们:

var_dump($mathes);
array(1 => "Sam.",2 => " sam", 3 => "Sam_", 4 => "_Sam");

感谢大家的帮助。我很感激。