繁体   English   中英

使用正则表达式识别节点列表

[英]Using regular expressions to identify nodelists

以下信息应分为两个数组:

  • foo089,酒吧[120-123,215]

期望的结果是两个数组,其中包含所有列出的数字[089]和[120-123,215](甚至更好的是120,121,122,123而不是120-123,这是可选的)。

其他应解析的示例:

  • FOO [133,370,390-391],bar120
  • foo123
  • bar145
  • 酒吧[121303]
  • foo123,bar145

所有这些都将导致一个由两个元素组成的数组(第一个是foo,第二个是bar),具有单个条目(例如123或145)或范围(例如133,370,390-391或121,303)。

我始终需要两个数组,以轻松确定该数字属于foo还是bar。

限制

  • foo或bar不必存在
  • 如果两者都存在,它们总是被命令
  • 数字总是有3位数字
  • 只有foo和bar,没有其他字词
  • foo234,foo425不允许。 如果foo或bar有多个数字,则将其列在方括号中

到目前为止,我尝试了以下正则表达式: \\d{3}|foo\\d{3}|bar\\d{3}|\\d{3}-\\d{3} 但是,在php中使用preg_grep时,我没有得到想要的结果。

^(?!foo\d{3},bar\d{3})(?:foo(\[(?:\d{3}(?:-\d{3})?,?)+\]|\d{3}))?,?(?:bar(\[(?:\d{3}(?:-\d{3})?,?)+\]|\d{3}))?$

现在在匹配结果中,第一组是foo的数字,第二组是bar的数字。

说明:

  1. (?:\\d{3}(?:-\\d{3})? - 三位数三位数破折号三位数
  2. (?:\\d{3}(?:-\\d{3})?,?)+ -以上重复多次,可能用逗号分隔
  3. \\[(?:\\d{3}(?:-\\d{3})?,?)+\\] -相同,但放在方括号中
  4. |\\d{3} -或者,仅三位数
  5. (?:foo(\\[(?:\\d{3}(?:-\\d{3})?,?)+\\]|\\d{3}))? 上面的内容,但在foo之前加上?
  6. ,? -可选的逗号分隔foobar
  7. bar部分与foo的部分几乎相同
  8. (?!foo\\d{3},bar\\d{3}) -禁止使用诸如foo123,bar456之类的东西
  9. ^$ -从头到尾匹配

看到它在这里行动

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM