0

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

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

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

诚然,我对正则表达式相当缺乏经验,而且我设法解决的大部分内容都是我必须阅读的简单示例。这可以用一个简短而有效的正则表达式来完成吗?

4

1 回答 1

1

这是你要找的吗?

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

在线演示

如果您正在寻找整行作为匹配项,请尝试下面的正则表达式并从索引 1 的匹配组中获取 if

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

在线演示

用于preg_match_all获取所有匹配的组。

于 2014-07-13T10:15:08.783 回答