how to pass regexes
as argumentsを学習した後、sub
を使用して最初の正規表現を構築しようとしましたが、もう一度スタックしました。以下の複雑なルールには申し訳ありませんが、私はそれらを単純化するために全力を尽くしました。私は少なくともこの問題に近づくための手がかりが必要です。Perlでsubを使った正規表現を構築する
regex
はleft
とright
はペアで来るべきであるとmiddle
の変異体が選択されるright
に依存交番、left
、middle
とright
からなるそれらの各々で構成すべきです。
Pairs
のアレイはleft
とright
のペアを含む:
my Pair @leftright =
A => 'a',
...
Z => 'z',
;
Middle
変異体は、ハッシュから読み出される:right
がz
ある場合
my Regex %middle =
z =>/foo /,
a =>/bar /,
m =>/twi /,
r =>/bin /,
...
;
%middle<z>
は%middle<a>
、選択されるべきである - right
場合a
など
したがって、得られた正規表現は
my token word {
| A <%middle[a]> a
| Z <%middle[z]> z
| ...
}
または、より一般的
my token word {
| <[email protected][0].key>
<middle=%middle{@leftright[0].value}>
<[email protected][0].value>
| (the same for index == 1)
| (the same for index == 2)
| (the same for index == 3)
...
}
であるべきであり、それはAbara
とZfooz
と一致すべきです。 、@leftright
からすべてのペアを取るright
の値に応じて、適切な%middle{}
を配置し、1 regex
にそれをすべて結合しますsub
と(grammar
に例えば使用することができます)token word
を構築する方法
?
my Regex sub sub_word(Pair @l_r, Regex %m) {
...
}
my token word {
<{sub_word(@leftright, %middle)}>
}
は、私がleft
、middle
、およびright
の値を知っておく必要が試合後:
"Abara" ~~ &word;
say join '|', $<left>, $<middle>, $<right> # A|bar|a
を見ます、中間は '/ waldo /'です。しかし、あなたは 'X'と' waldo'の間でどのようなプログラム的関係が検出されていると言われていません。( '/ zfoo /'の 'z'は'/zfoo/'ではなく、'/waldo/'ではなく' z'を書きましたが、違いはありません。あなたのプログラムが '/ zfoo /'パターンに '/ zfoo /'が含まれていることを内在的に知ることはできないと思います。 'z') – raiph
トークン' word'を構築すべきサブパラメータの入力パラメータは何でしょうか?正規表現解析が定義済みの 'token'を構築する前にsubを使うべきでしょうか、それとも正規表現パーサ内で使うべきでしょうか?簡単な例がありますか? –
@raiphありがとうそれは私のせいだ(と私はそれについて考えた)、私は '正規表現'へのイントロスペクションを意味しませんでした。私はこの部分を再フォーマットし、ハッシュを作成します。 –