給定一個檔案,我們在其中找到可變數量的“組”,每個組都有一個內容。
- 一行可以包含方括號之間的標題
- 并且,在每個組的標題下方,我們有該組的內容。該組的內容對包含的字符沒有限制。內容中的行不能以字符 '[' 開頭(以 '[' 開頭的行是組的標題)
下面是一個遵循這些規則的檔案示例:
[titleOfgroup1]
foo
faafaa [ddfdf]
fii
[title of group2]
faa fii@@
<tag1>fuu</tag1>
foo1234
wdw
dwd
[title of [group3]]
faa faa
[titleOfGroup4]
fiifoo
我正在尋找使用 REGEX 捕獲所有標題組和捕獲的每個組的所有內容。REGEX 作業后預期的結果:
GROUP 1 :
MATCH 1 : 'titleOfgroup1'
MATCH 2 : 'foo
faafaa [ddfdf]
fii'
GROUP 2 :
MATCH 1 : 'title of group2'
MATCH 2 : 'faa fii@@
<tag1>fuu</tag1>
foo1234'
GROUP 3 :
MATCH 1 : 'title of [group3]'
MATCH 2 : 'faa faa'
GROUP 4 :
MATCH 1 : 'titleOfGroup4'
MATCH 2 : 'fiifoo'
我嘗試了一些正則運算式,我接近解決方案,但我卡住了。我最后一次嘗試是這個正則運算式:(正則運算式^\[(.*)\]\n[\s]*([\S\s]*?)[\s]*(?=\n\[)101
我怎樣才能得到最后一組?謝謝你的幫助 !
(ps:我正在尋找一個適用于 javascript 和 php 的正則運算式)
uj5u.com熱心網友回復:
您沒有匹配最后一行,因為您的模式中的最后一部分(?=\n\[)斷言必須有一個換行符后跟[存在。
你可以做的是捕獲第 1 組中的標題,然后在第 2 組中匹配所有不以[在匹配換行符后使用負前瞻開頭的行
^\[(. )\]\n((?:(?!\[).*(?:\n|$))*)
^字串的開始\[(. )\]匹配[捕獲第1 組中的標題并匹配]\n匹配換行符(或 \r?\n)(捕獲組 2(?:非捕獲組作為一個整體重復(?!\[)[負前瞻,不向右斷言.*(?:\n|$)匹配整行和換行符或斷言字串的結尾
)*關閉非捕獲組并可選擇重復它以匹配所有行)關閉組 2
查看正則運算式演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/527106.html
