簡體   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