は私が..乳液やHTMLファイル内に多くの正規表現をしなければならないと、多くの場合、私は次のような状況で私の自己を見つける:正規表現:スタックで非貪欲?
私は\mbox{\sqrt{2}} + \sqrt{4}
のようなものが\sqrt{2} + \sqrt{4}
ストリッピングすることにしたいです。すなわち :「、だから、その内容によって
をの\ mbox形式{...}のすべての発生を置き換える私は
貪欲バージョン\mbox{(.*)}
私に$ 1 \sqrt{2}} + \sqrt{4
と非 を取得することをどのように行うのですか?は、貪欲なバージョン\mbox{(.*?)}
は私に$ 1 \sqrt{2
を取得します。
どちらも私が欲しいものではありません。私は必要なもの
は、正規表現エンジンは何とか前の位置にあることとBEH文字の スタックを保持していること、ですind (.*)
、すなわち{
と}
です。したがって、.*
に新しい{
が出現した場合は、スタックに配置する必要があります。 }
が発生した場合は、最後の{
をスタックから削除する必要があります。スタックが空の場合、.*
が実行されます。
同様のケースがネストされたHTMLタグで発生します。
大部分の正規表現エンジンは正規表現ごとにFSAを作成するので、スタックが実行可能である必要がありますか、何か迷っていますか?私が気づいていない珍しい修飾語?私は不思議に思っています、なぜこれのための解決策がありません。
私は一切のJava/Pythonの/ Perlで私の自己のために何かをコーディングすることができもちろん..しかし、私はそれが
よろしく:)正規表現に統合したいのですが、ギルバート
(PS:私は、 )\
があまりにもエスケープする必要があり、小さな例を維持するために
これは標準的な正規表現では不可能です。ネスティングの任意の深さは通常の言語では表現できません。 (FSAの** F **を考えてみてください) –
ねえ、良い点。何とか満足していない。私はこれが共通の問題だと思っていたので、解決策がいくつかあります。 – Gilbert
確かに。その解決策は、正規表現よりも広い範囲の文法に対応できるパーサーを使用することです。 –