【问题标题】:Custom definition for word boundary for words that begin or end with non-word characters以非单词字符开头或结尾的单词的单词边界的自定义定义
【发布时间】:2013-05-13 14:37:15
【问题描述】:

我有一个单词数组,其中包含 "DOM" *".Net"* 和 "C++" 等字符串。我正在尝试通过使用单词边界通配符对某些文本中的每个字符串执行整个单词匹配。如果单词被读入一个变量,它看起来像:

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

这适用于“DOM”之类的示例,但不适用于“.Net”或“C++”,因为在 .Net 的情况下也可以在 . 看到单词边界,并且已经在+ 在 C++ 的情况下。 PHP 中的正则表达式中是否有另一种方法可以将 .NetC++ 视为单词边界的“单词”?

【问题讨论】:

  • 一个点通常是一个单词的结尾。我认为您需要在空格上选择单词。但是想想这一点,您想验证 .Net 而不是其他点,例如句子的结尾..?在我看来,您需要对匹配和不匹配的内容提出一些具体要求。

标签: php regex


【解决方案1】:

这无法完成,因为\b 匹配非单词字符 (\W)。

您可以做的是搜索与您定义为单词的某些字符集不匹配的字符,如下所示:

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

编辑:添加了反向引用,因此您只需键入该序列一次。

【讨论】:

  • 虽然这里发生的情况是一个带有点的单词(句子的结尾)将匹配 with 点。我认为 OP 需要考虑其影响(尽管答案很好!)。
【解决方案2】:

字符类...假设你只想做空格和逗号,你会这样做

preg_match("/[, ]".preg_quote($word)."[, ]/",...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 2021-02-25
    相关资源
    最近更新 更多