【问题标题】:Ignoring case for a whole pattern of strings忽略整个字符串模式的大小写
【发布时间】:2013-05-24 11:11:18
【问题描述】:

regexp 不是我的强项,但我有一个要检查的 4 个字符串的列表。我创建了一个(对我来说)可读的模式,因此可以轻松添加更多内容,但我 99% 肯定不会。

列表是,我想匹配字符串不管用什么大小写。

  • packstation - (packstation | Packstation | PACKSTATION)
  • 包装站 - (包装站 | 包装站 | 包装站 | 包装站 | 包装站)
  • paketstation - ( paketstation | Paketstation | PAKETSTATION )
  • 帕吉特站-(帕吉特站|帕吉特站|帕吉特站|帕吉特站|帕吉特站)

我使用的模式是

^(?!packstation|pack station|paketstation|paket station$).*$

我的问题是我无法忽略大小写。我尝试在多个地方添加 i 标志,但它只是破坏了模式识别并且没有任何通过。

不确定我是否需要创建更复杂的模式,或者它是否与仅接受模式的 Demandware 正则表达式有问题。

【问题讨论】:

  • 您想匹配这些字符串并忽略大小写吗?
  • 语言是什么?
  • @jerry 我想是的,如果你的意思是我想匹配,不管情况如何,packstation 可能是 (packstation|Packstaion|PACKSTATION)
  • @nhahtdh 你指的是口语还是编程语言?语言是德语,编程语言是基于 Java 的需求软件。
  • @bdjohnson:我要的是编程语言。 (当您询问正则表达式时,请始终用一个标记您的问题)。

标签: java regex regex-negation


【解决方案1】:

您没有指明语言。如果您使用 Java、Python、Ruby、Perl、.NET 或 PCRE (PHP),您可以在您的模式中添加一个内部修饰符 (?i)。在你的情况下:

(?i)^(?!packstation|pack station|paketstation|paket station$).*$

您也可以将其缩短为:

(?i)^(?!pack ?station|paket ?station$).*$

对于这种情况,正则表达式在上面列出的所有语言中都具有相同的效果。

请注意,正则表达式会拒绝:

packstation
PackStation
PACKSTATION
pAcKstAtioN

所有大小写字母组合都将被拒绝。

在 Python 中,internal 修饰符是全局的,你只能为整个模式打开它(不管你声明它的位置)。

在 Java、Ruby、Perl、.NET 或 PCRE 中,您可以通过在非捕获组 (?modifiers:pattern) 中使用内部修饰符来确定其范围。您也可以使用(?modifiers) 从指定位置将其打开,并使用(?-modifiers) 从指定位置将其关闭,因为在这些语言中,修饰符的效果仅限于声明它的位置。

通常,大多数语言都会为您提供一个选项来指定主模式之外的标志。它可以支持它作为主模式的结束分隔符之后的尾随字符,也可以在函数调用中支持它。

【讨论】:

  • 非常感谢您的解释和示例,很抱歉我没有用语言标记它,但我在 xml 文件中使用正则表达式功能,由 isml 模板使用(基本上是扩展的jsp页面)。所以假设它是java,但我所能做的就是交出一个模式。比如 regexp="(?i)^(?!pack ?station|paket ?station$).*$".
猜你喜欢
  • 1970-01-01
  • 2016-01-29
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-06
  • 2012-05-06
  • 2013-04-11
相关资源
最近更新 更多