2013-05-13 44 views
0

我有包含像“DOM” * “净” *和‘C++’串话的阵列。我试图通过使用字边界通配符来为某些文本中的每个字符串执行整个单词匹配。如果字被读入一个变量,它看起来像:定制定义为开始或非单词字符结尾的单词

preg_match("/\b".preg_quote($word)."\b/",...) 

这对于喜欢“DOM”的一个例子能正常工作,但不适合“ NET”或‘C++’,因为单词边界也被视为在。在.Net的情况下为,并且在C++的情况下已经在+处看到。在PHP的正则表达式中有没有另外一种方式将.NetC++作为单词边界的“单词”?

+0

一个点通常会成为单词的结尾。我想你需要在空间上选择你的话。但想一想,你想验证** .Net **,但不是其他的点,例如句子的结尾。对我来说,你需要提出soem特定的要求,以匹配什么和不匹配什么。 – Aquillo 2013-05-13 06:26:12

回答

2

这不能做,因为对于非单词字符(\W\b匹配。

你可以做什么,而不是为搜索不匹配的一些字符集的定义是字,字符,如下图所示:

preg_match("/([^a-zA-Z_.+])".preg_quote($word)."\1/",...); 

编辑:增加了backrefrence,所以你只需要键入该序列一次。

+0

+1更好然后我有什么 – Orangepill 2013-05-13 06:26:30

+0

虽然这里发生的是一个结束点(一个句子结尾)的单词将与**点匹配**。我认为OP需要考虑其含义(尽管如此,这是一个很好的答案!)。 – Aquillo 2013-05-13 06:28:20

0

字符类...比方说,你只希望做空格和逗号,你会做这个

preg_match("/[, ]".preg_quote($word)."[, ]/",...) 
相关问题