【问题标题】:RegEx match case sensitivity [duplicate]正则表达式匹配区分大小写[重复]
【发布时间】:2014-07-01 13:56:47
【问题描述】:

我有这个代码>

Dim match = Regex.Match(text.ToLower(), "(?<=[get|post])\s(?<Path>/.*)\shttp/1\.1.*?host:\s(?<Host>[A-Za-z0-9\-\.]*)", RegexOptions.Singleline )

所以当我匹配时,它给了我所有小写的 url

所以我删除了(ToLower)命令,但删除时它不匹配!!!!

你能给我这样的正则表达式代码,所以当我删除 (ToLower) 命令时它匹配.??

【问题讨论】:

  • 只需在 Singleline 选项旁边使用 RegexOptions.IgnoreCase

标签: .net vb.net


【解决方案1】:

构造函数为此提供了一个方法:

public Regex(string pattern,RegexOptions options)

使用RegexOptions中的一项:

RegexOptions.IgnoreCase

您已经使用了一个 RegexOptions,但 RegexOptions 是一个 [Flags] 枚举:您可以使用按位或运算符 (|) 一次使用多个选项:

Dim match = Regex.Match(text, "<pattern>", RegexOptions.Singleline | RegexOptions.IgnoreCase )

优点是在正则表达式中评估案例。 ToLower 命令将在字符串上运行。对于长字符串,这意味着代码运行两次。

【讨论】:

  • 我喜欢这样 Dim match = Regex.Match(text, "(?/.*)\shttp/1\. 1.*?host:\s(?[A-Za-z0-9\-\.]*)", RegexOptions.Singleline And RegexOptions.IgnoreCase) 仍然不匹配
  • 为什么代码会运行两次?
  • @user3793707:您可以使用按位或(更新的答案)来执行此操作。
  • @KyleW:我的意思是ToLower 在字符串上以线性时间运行,Regex 也以线性时间运行。时间复杂度不变。但是ToLower 实际上是多余的,因为您可以编译一个忽略字符串中每个字符的大小写的正则表达式。
  • 非常感谢...它适用于 AND 的 OR instate
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-09
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
相关资源
最近更新 更多