我有一个大约 12 万个英语单词的列表(基本上是该语言中的每个单词)。
我需要一个正则表达式,允许使用通配符搜索这些词,又名 *
和 ?
。
几个例子:
- if the user searches for
m?st*
, it would match for examplemaster
ormister
ormistery
. - if the user searches for
*ind
(any word ending inind
), it would matchwind
orbind
orblind
或grind
。
现在,大多数用户(尤其是那些不熟悉正则表达式的用户)都知道 ?
是对 1 个字符的替换,而 *
是对 0、1 或更多字符的替换人物。我绝对想基于此构建我的搜索功能。
我的问题是:如何将用户键入的内容(例如 m?st*
)转换为正则表达式?
我搜索了网络(显然包括这个网站),我所能找到的都是试图教我太多的教程或有些相似的问题,但不足以为我自己的问题提供答案。
我能想到的是我必须用 ?
.
。所以 m?st*
变成 m.st*
。但是,我不知道用什么替换 *
。
任何帮助将不胜感激。谢谢你。
PS:我对正则表达式完全陌生。我知道它们有多强大,但我也知道它们很难学。所以我只是从来没有花时间去做……
原文由 Radu Murzea 发布,翻译遵循 CC BY-SA 4.0 许可协议
除非你想要一些有趣的行为,否则我建议你使用
\w
而不是.
.
匹配空格和其他非单词符号,您可能不希望它这样做。所以我会用
?
并将\w
替换为*
\w*
此外,如果您希望
*
匹配至少一个字符,请将其替换为\w+
。 This would mean thatben*
would matchbend
andbending
but notben
- it’s up to you, just depends what your requirements are.