首页 > 解决方案 > 正则表达式匹配字符串中任意位置的多个字符串

问题描述

我正在尝试使用 Regex 在 ASP.NET 中添加一些验证。基本上我需要确保一个文本框同时包含 ***ThisString*** 和 ***ThatString*** 包括星号。

我可以让它与一个或一个或另一个一起工作,只是不能同时出现在字符串的任何部分。它正在验证。

谢谢

标签: asp.netregexasp.net-corec#-4.0

解决方案


正如 nanhydrin 正确指出的那样,如果有多个字符串之一而不是另一个字符串,我的解决方案将不起作用。如果可能发生这种情况,为了便于阅读,您可以分别检查每个字符串

  • 第一个正则表达式-(?:\*{3}ThisString\*{3})

  • 第二个正则表达式-(?:\*{3}ThatString\*{3})

如果在这两种情况下都找到匹配项,那么您就可以开始了!

原答案:-

这是您想要的正则表达式:(?:\*{3}(?:ThisString|ThatString)\*{3})

注意:确保启用全局匹配并确保正确转义星号。

如果上面的表达式找到 2 个(或更多)匹配项,则表示您可以开始了。

解释:-

  • 整个事情都在一个非捕获组中,这是为了确保其中的所有内容都完全匹配
  • 字符串的每一侧都有 3 颗星,一侧有 3 颗星,而另一侧没有,将不会导致匹配
  • 两者ThisStringThatString在一个分组的替代方案中,这是为了减少混乱,你可以完全干扰所有可能的位置模式,但这更好,因为位置在这里并不重要。***ThatString***可以先来,***ThisString***反之亦然。

确保检查找到的匹配项的长度,长度必须为 2 才能满足您描述的条件。

这是现场演示


推荐阅读