正则表达式 - 只有零或一个s

时间:2012-08-26 16:37:17

标签: regex preg-match

我的名字是“foo bar”,任何字符串foofoosbarbars都应匹配。

我认为这应该是这样的:(foo|bar)s?。尝试了其他一些正则表达式,但它们都是这样的。

你能帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

(foo|bar)s?是正确的..

你应该像\b(foo|bar)s?\b那样使用边界,否则它也会匹配hihellofoos

答案 1 :(得分:2)

您的问题似乎反映了您在foosss找到匹配项的原因的困惑。注意在字符串中查找匹配项和匹配整个字符串之间的区别。

您有多种方法可以解决这个问题,正确的选择取决于您的应用程序。

  • 将正则表达式锚定到整个输入行或输入:^(foo|bar)s?$
  • 将正则表达式锚定为一个单词:\b(foo|bar)s?\b
  • 某些API(但不是preg_match)有一个单独的函数来匹配整个字符串。