我有一個這樣的資料檔案:
[linux]
foo
faafaa
fii
[windows]
faa fii@@
<tag1>fuu</tag1>
foo1234
[osname3]
faa faa
[osname4]
fiifoo
我正在尋找捕獲所有作業系統名稱和每個作業系統標題內的內容。作業系統的數量和內容是變數,一個內容可以包含所有現有的字符。REGEX 之后的預期結果是這樣的:
Match1 :
Groupe1 : 'linux'
Groupe2 : 'foo
faafaa'
Match2 :
Groupe1 : 'windows'
Groupe2 : '
faa fii@@
<tag1>fuu</tag1>
foo1234
'
Match3 :
Groupe1 : 'osname3'
Groupe2 : 'faa faa'
Match4 :
Groupe1 : 'osname4'
Groupe2 : 'fiifoo'
我最后一次嘗試是這個 REGEX :(?:\[([\S ] )\]\n((?:[\s\S\n])(?!\n\[))*)
但是,
問題在這里:(?:[\s\S\n])(?!\n\[))*
如果我在這里翻譯我想要做的事情:“請使用正則運算式,你能捕獲所有字符([\s\S\n])但在模式之前停止(\n\[)”嗎?
但我沒有我所期望的,我不明白為什么......
最后,由于某些原因,我的 REGEX 需要與 php 和 javascript 一起使用
謝謝你的幫助 :)
uj5u.com熱心網友回復:
我懷疑這個正則運算式是否適用于您想要匹配的更復雜的情況,但它似乎傳遞了給定的輸入:
const regex = /(?:\[(\w )\])\n((?:[^[]*\n|[^[]))*/gm;
// ^^^^^^^^^^^^ match lines that do not contain '['
// ^^^^^ match inside brackets
但是,此輸入看起來像TOML - 所以在這種情況下,請使用 TOML 決議器而不是正則運算式 :)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/527111.html
