【问题标题】:Regex match all specific string or at least one正则表达式匹配所有特定字符串或至少一个
【发布时间】:2017-05-04 16:19:27
【问题描述】:

我无法解决这个问题。这是我的问题。

测试字符串:

abc.1.2.4.6.8.10.9.8.7.10.12345 = WORDS: "ABC|1A|CDE-FGH|password:FSSAD234SD2|cgap:234-34/23/23"

正则表达式:

9\.8\.7\.10\.(\d+) = (?:WORDS: )?"[^"]*(?:password:([A-Za-z0-9\.\-]+))

这将匹配12345 和密码字符串FSSAD234SD2

但有时我不会得到密码字符串,所以测试字符串如下,

abc.1.3.5.7.9.11.9.8.7.10.12345 = "" 

所以我想至少匹配12345

在线正则表达式网址:

https://regex101.com/r/kQ3wT5/12 - 工作正常。

https://regex101.com/r/kQ3wT5/13 - 不工作。

【问题讨论】:

  • 使非捕获组可选。

标签: regex perl


【解决方案1】:

这个正则表达式使密码部分成为可选的。并像您一样分组捕获。

正则表达式: \.(\d+)\s*=(?:.*?password:([^|]*))?

Regex101 Demo

【讨论】:

  • 感谢 Rahul... :) 第二个没有捕获密码字符串。
  • 去第一个。
【解决方案2】:

我想出了这个正则表达式:

'^(?:\w+\.)*(\d+) = (?:WORDS: )?"(?:.*\|password:([^\|]*).*)?"$'

如果您需要任何精度,请询问!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    相关资源
    最近更新 更多