0

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

对不起,让我澄清一下。截至目前,我可以匹配“To”、“ to ”、“$to$”、“#To#”。但是,如果我使用下面的代码搜索“To_Lee”,它不会找到它。我需要能够匹配“To_Lee”,但忽略其中包含“to”的任何单词,如“tomato”。

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

除 To_Lee 外,这将对所有情况返回 true。有人可以告诉我我需要做什么才能将 To_Lee 捕获为有效匹配吗?

很抱歉造成混乱,希望这更清楚一点。

再次感谢。

4

1 回答 1

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..';

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

$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");

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

于 2012-09-06T16:49:32.317 回答