匹配整个单词,而忽略使用正则表达式的单词词缀

时间:2014-07-13 04:39:56

标签: php mysql regex word-boundaries

我正在学习一门新语言,并且我已经用aprox创建了一个数据库。 2500字和2500例的单词。我创建了一个PHP / MySQL Web UI,基本上显示每个单词的图片,当您单击它们时,它将播放单词的音频。还有一个上下文菜单,用于触发弹出div,该弹出div匹配并显示单词出现的所有示例。

我一直在使用REGEXP '[[:<:]]$word[[:>:]]'但是我想要过滤掉几个单词的前缀/后缀,这些单词/后缀不会为单词添加任何实际意义(比如英语中的后缀-ing)。我解决这个问题的一种方法是在词缀开头的单词中加一个连字符,这样正则表达式仍然与单词匹配,但这并不完全符合语言处理拼写的方式。我也不想过滤不同的单词组合,因为意思完全不同。这里没有详细说明一些伪示例,匹配的单词只是“WORD”,前缀和后缀我想要过滤为pre1pre2 ...和suf1,{ {1}} ...以及我不希望过滤为suf2

的内容
xxx

在上面的例子中我想匹配1,2,3,4,5,但我不想匹配6,7,8,9,10。我开始只添加OR子句,例如:

1. Xxx xxx WORDsuf1 xxx xxx xxx.
2. Xxx xxx WORDsuf2 xxx xxx xxx.
3. Xxx xxx pre1WORDsuf1 xxx xxx xxx.
4. Xxx xxx WORD xxx xxx xxx.
5. Xxx xxx pre1WORD xxx xxx xxx.
6. Xxx xxx pre2WORDxxx xxx xxx xxx.
7. Xxx xxx xxxWORDxxx xxx xxx xxx.
8. Xxx xxx pre1WORDxxxsuf1 xxx xxx xxx.
9. Xxx xxx pre1xxxWORDsuf1 xxx xxx xxx.
10. Xxx xxx xxxWORDxxx xxx xxx xxx.

这适用于一个例外,但有多个例外,它会变得混乱。

不可否认,我对正则表达式缺乏经验,而且我设法解决的大部分内容都是我必须阅读的简单示例。这可以通过简短有效的正则表达式完成吗?

1 个答案:

答案 0 :(得分:1)

这是你在寻找什么?

(\b(pre1|pre2)?WORD(suf1|suf2)?\b)

Online demo

如果您正在寻找整条线作为匹配,请尝试以下正则表达式并从索引1处的匹配组获取

(.*(\b(pre1|pre2)?WORD(suf1|suf2)?\b).*)

Online demo

使用preg_match_all获取所有匹配的群组。