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

2024-04-19 22:10:15 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我一直在使用REGEXP'[[:<:]]$word[[:>:]]',但是我想过滤掉一些单词的前缀/后缀,它们不会给单词增加任何真正的意义(比如英语中的后缀-ing)。我解决这个问题的一种方法是在词缀开头的单词中加一个连字符,这样正则表达式仍然与单词匹配,但这并不完全符合语言处理拼写的方式。还有一些我不想过滤的词的不同组合,因为它们的意思完全不同。这里有一些伪示例,其中匹配的单词仅为“word”,前缀和后缀我想过滤为pre1pre2。。。和{},{}。。。我不想过滤为xxx的东西

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,2,3,4,5,但我不想匹配6,7,8,9,10。我开始添加OR子句,例如:

REGEXP  '[[:<:]$word[[:>:]]|[[:<:]]$word$suffix[[:>:]]'

这对于一个异常很好,但是对于多个异常,它会变得混乱

诚然,我对正则表达式非常缺乏经验,我所能做的大部分工作都是简单的例子,我必须仔细阅读。这可以用一个简短高效的正则表达式来完成吗


Tags: div语言示例dbmysql单词后缀例子
1条回答
网友
1楼 · 发布于 2024-04-19 22:10:15

这就是你要找的吗

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

Online demo

若你们正在寻找一个匹配的整行,那个么试着在正则表达式下面,并从索引1的匹配组中得到If

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

Online demo

使用preg_match_all获取所有匹配的组

相关问题 更多 >