\\[()] | [^()] ) | \g )* \) ) \x m=reg.match(str).to_a このコ...">

正規表現の再帰

str = "a * ((bc)/(de) - f) * g"

reg = /(?
\(
(?:
(?>
\\[()]
|
[^()]
)
|
\g
)*
\)
)
\x

m=reg.match(str).to_a


このコードはcatの下で何をしますか。

このコードは、括弧が正しく配置されたネストされた式を検出します。

reg = /(?#名前付き式の始まり
\(#開き括弧
(?:#未記録グループ
(?>#独自の表現とのマッチング
\\ [()]#エスケープされたブラケット
| #どちらか
[^()]#括弧ではない
)#独自表現の終了
| #どちらか
\ g#括弧内のネストされたグループ(再帰呼び出し)
)*#忘れられないグループ
\)#閉じ括弧
)#式の終わり
\ x#

m = reg.match(str).to_a#["a((bc)/(de)-f)"。 「a((bc)/(de)-f)」]

左利きのリキュールが禁止されていることを忘れてはなりません

何ができるか。

str = "bbbaccc"
rel = /(? a|b\gc)/
re1.match(str).to_a


そしてそれは不可能です。
re2 = /(? a|\gc)/

Source: https://habr.com/ru/post/J50749/


All Articles