正则表达式通配符匹配
问题内容:
我列出了大约12万个英语单词(基本上是该语言中的每个单词)。
我需要一个正则表达式,允许使用通配符aka *
和来搜索这些单词?
。
一些例子:
- 如果用户搜索
m?st*
,它会匹配,例如master
或mister
或mistery
。 - 如果用户搜索
*ind
(以结尾的任何单词ind
),则它将匹配wind
或bind
或blind
或grind
。
现在,大多数用户(尤其是对正则表达式不熟悉的用户)都知道,该用户只能?
替换1个字符,而*
可以替换0、1个或多个字符。我绝对想基于此构建我的搜索功能。
我的问题是:如何将用户输入的内容(m?st*
例如)转换为正则表达式?
我在网上搜索(显然包括该网站),而我所能找到的只是教程,这些教程试图教给我太多或相似的问题,但不足以为我自己的问题提供答案。
我只能弄清楚我必须替换?
为.
。如此m?st*
成为m.st*
。但是,我不知道该*
用什么替换。
任何帮助将不胜感激。谢谢。
PS:我对正则表达式完全陌生。我知道它们有多强大,但是我也知道它们可能很难学习。所以我从来没有花时间去做…
问题答案:
除非您想要一些有趣的行为,否则我建议您使用\w
而不是.
.
匹配空格和其他非单词符号,您可能不希望这样做。
因此,我将代替?
与\w
和替换*
用\w*
另外,如果您要*
匹配至少一个字符,请替换为\w+
。这意味着ben*
将匹配bend
和bending
而不是ben
-这是你的,只是取决于你的需求是什么。