我正在学习一门新语言,我已经用aprox创建了一个DB。2500个单词和2500个例子。我创建了一个PHP/MySQL web UI,基本上显示每个单词的图片,当你点击它们时,它会播放单词的音频。还有一个上下文菜单来触发一个弹出式div,该div匹配并显示出现该单词的所有示例。
我一直在使用REGEXP '[[:<:]]$word[[:>:]]'
,但是我想过滤掉的单词有几个前缀/后缀,它们不会为单词添加任何真正的含义(如英语中的后缀-ing)。我解决这个问题的一种方法是在词缀开始的地方放一个连字符,这样regex仍然匹配单词,但这并不完全符合语言处理拼写的方式。还有不同的单词组合,我不想过滤,因为意思是完全不同的。这里有一些伪例子,匹配的单词只是"word",我想过滤为pre1
, pre2
…suf1
, suf2
…和我不想过滤的内容作为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[[:>:]]'
对于一个异常可以正常工作,但是对于多个异常就会变得混乱。
无可否认,我对正则表达式相当缺乏经验,我设法解决的大多数都是我必须阅读的简单示例。这可以用一个简短而有效的正则表达式来完成吗?
这是你想要的吗?
(b(pre1|pre2)?WORD(suf1|suf2)?b)
在线演示如果你正在寻找整行作为匹配,然后尝试下面的regex,并从匹配组在索引1
(.*(b(pre1|pre2)?WORD(suf1|suf2)?b).*)
在线演示使用preg_match_all
获取所有匹配的组