如果沒有嵌套,並且保持簡單,使用\G
結構和基於捕捉組其他一些
邏輯,你應該能夠構建
文字輸出。
注意 - 這只是解析孤立的分組,而不是之後。
這將被視爲您想要解析的子部分。
您可以刪除^
定位點併爲中間字符串使用添加邏輯。
但是,像這樣說,這只是一個部分。
以下用法 -
使用while循環搜索每個匹配項。
在正文中,這些是觸發器:
- 如果組1匹配,則存儲前綴值。
(第2組將同時匹配)。
- 如果第2組匹配,這是下一個或,將其與前綴
結合爲一個獨特的部分。
- 第3組將始終匹配。這是你在哪裏的指標。
它匹配或 bar |
或末端支架}
。
繼續緩存臨時唯一部分,直到找到末端支架。
在所有匹配結束時,如果遇到結尾,則唯一部分
有效。也就是說,整個事情分析得很好。
在每個部分中,您將需要刪除任何轉義,因爲它們在匹配中沒有被剝離
。
Find: (?<!\\)\\\K\\
'~(?<!\\\)\\\\\K\\\\~'
Replace: nothing
祝你好運!
正則表達式:
(?:(?!^)\G|^([^\|{}\\]*(?:\\.[^\|{}\\]*)*){)([^\|}\\]*(?:\\.[^\|}\\]*)*)(\||})
'~(?:(?!^)\G|^([^\|{}\\\]*(?:\\\.[^\|{}\\\]*)*){)([^\|}\\\]*(?:\\\.[^\|}\\\]*)*)(\||})~'
格式化:
(?:
(?! ^)
\G
|
^
( # (1 start)
[^\|{}\\]*
(?: \\ . [^\|{}\\]*)*
) # (1 end)
{
)
( # (2 start)
[^\|}\\]*
(?: \\ . [^\|}\\]*)*
) # (2 end)
(\| | }) # (3)
實施例4輸出:
** Grp 0 - (pos 0 , len 4)
{\{|
** Grp 1 - (pos 0 , len 0) EMPTY
** Grp 2 - (pos 1 , len 2)
\{
** Grp 3 - (pos 3 , len 1)
|
------------------
** Grp 0 - (pos 4 , len 3)
\||
** Grp 1 - NULL
** Grp 2 - (pos 4 , len 2)
\|
** Grp 3 - (pos 6 , len 1)
|
-------------------
** Grp 0 - (pos 7 , len 3)
\}}
** Grp 1 - NULL
** Grp 2 - (pos 7 , len 2)
\}
** Grp 3 - (pos 9 , len 1)
}
示例1輸出:
** Grp 0 - (pos 0 , len 5)
ab{c|
** Grp 1 - (pos 0 , len 2)
ab
** Grp 2 - (pos 3 , len 1)
c
** Grp 3 - (pos 4 , len 1)
|
-------------------
** Grp 0 - (pos 5 , len 2)
d|
** Grp 1 - NULL
** Grp 2 - (pos 5 , len 1)
d
** Grp 3 - (pos 6 , len 1)
|
-------------------
** Grp 0 - (pos 7 , len 2)
e}
** Grp 1 - NULL
** Grp 2 - (pos 7 , len 1)
e
** Grp 3 - (pos 8 , len 1)
}
怎麼樣嵌套? – sln
使用'preg_replace_callback()' – Barmar
將表達式轉換爲正則表達式,將「{}」替換爲「()」,並使用類似反向正則表達式的庫:https://github.com/icomefromthenet/ReverseRegex。 – maxhb