【问题标题】:Regex Matching Optional Parameters with same groups正则表达式匹配具有相同组的可选参数
【发布时间】:2012-11-07 04:39:16
【问题描述】:

匹配所有这些行的最佳方法是什么。在前两行中,我将有 3 个组,用户/密码/模式,但在最后一行中,我希望拥有所有三个组,但只有 3 的值是一个空字符串。

set admin user "user1" password "password1" privilege "all"
set admin user "user2" password "password2" privilege "all"
set admin user "user3" password "password3" 

我当前的正则表达式只匹配前 2 个。

set admin user "(?<user>[\w-]+)" password "(?<password>.*)"(\s+privilege\s+"(?<mode>[\w-]+)")

【问题讨论】:

    标签: c# regex


    【解决方案1】:
    set admin user "(?<user>[\w-]+)" password "(?<password>.*?)"(\s+privilege\s+"(?<mode>[\w-]+)")?
    

    尾随 ? 使最后一组可选

    【讨论】:

    • 你也应该让密码模式变得惰性((?&lt;password&gt;.*?)),否则它总是会抢到特权。
    • 是的,这行得通。我知道我尝试了问号,它使我的小组 1-6 而不是 1-3。我一定是把括号弄乱了?
    【解决方案2】:

    只需添加 ? 作为可选组或字符。

    ab? 将匹配aab,因为b 之后的? 表示字符或组是可选的。

    另一个例子:a(abc)? 这也将匹配 aaabcabc 反向引用,因为您已经告诉模式“编译器”"abc" 字符串是可选的。

    对可选项目的解释非常好:Optional Items in Regex

    【讨论】:

      猜你喜欢
      • 2020-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-06
      • 2013-11-25
      • 2019-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多