正则表达式通配符匹配


问题内容

我列出了大约12万个英语单词(基本上是该语言中的每个单词)。

我需要一个正则表达式,允许使用通配符aka *和来搜索这些单词?

一些例子:

  • 如果用户搜索m?st*,它会匹配,例如mastermistermistery
  • 如果用户搜索*ind(以结尾的任何单词ind),则它将匹配windbindblindgrind

现在,大多数用户(尤其是对正则表达式不熟悉的用户)都知道,该用户只能?替换1个字符,而*可以替换0、1个或多个字符。我绝对想基于此构建我的搜索功能。

我的问题是:如何将用户输入的内容(m?st*例如)转换为正则表达式?

我在网上搜索(显然包括该网站),而我所能找到的只是教程,这些教程试图教给我太多或相似的问题,但不足以为我自己的问题提供答案。

我只能弄清楚我必须替换?.。如此m?st*成为m.st*。但是,我不知道该*用什么替换。

任何帮助将不胜感激。谢谢。

PS:我对正则表达式完全陌生。我知道它们有多强大,但是我也知道它们可能很难学习。所以我从来没有花时间去做…


问题答案:

除非您想要一些有趣的行为,否则我建议您使用\w而不是.

. 匹配空格和其他非单词符号,您可能不希望这样做。

因此,我将代替?\w和替换*\w*

另外,如果您要*匹配至少一个字符,请替换为\w+。这意味着ben*将匹配bendbending而不是ben-这是你的,只是取决于你的需求是什么。