2017-10-21 18 views
0

これについて広範囲に検索しようとしましたが、同様の問題がありますが、これを把握することはできませんでした。正規表現、エスケープ文字以外の2文字の間のすべて

私の問題は、とりわけ、私が持っていることをこのフォームの文字列です:

%Aliquam hendrerit mollis pretium! Praesent id% 
%molestie \*libero vel\%\% pulvinar? Sed% 
\%% urna. \% Fusce% in *sapien %mau\*ris.% 

私は文字は\が付け加えている例を無視して、二パーセントsの間のすべてのものを選択します。最初のものは簡単で、何とか2番目のものをやっています。しかし、私は分かりません。

"%Aliquam hendrerit mollis pretium Praesent IDが%!"

は "*リベロVEL%のmolestie \%\%視床枕わかるsed%?"

:私は次のように選択したい上のテキストから、明確にするために、

"%白毫。\%のFusce%は"

"%舞う*のRIS%"

は改行、すなわちせずに元のテキストは、1つの長い文字列の一部であることを指摘したいです各行が必ずしも表示されない新しい行。

これまでのところ、私は最後のものを除いて、すべてを一致させることができるように思わ次の正規表現書かれている:それは選択した最後の一つは

(?<!\\)%([^%]*)(?!%\\)(?:%|(.*)%)(?<!\\%) 

を:。

「%の白毫\% *%s%%mau * ris。% "

これは多すぎます。私はそれがなぜそれを行うのかを本当に理解していない、多分それは私の正規表現の条件のためですか?どんな助けでも大歓迎です!この正規表現はあなたに期待した結果得られます

+0

2番目の手順でエスケープ文字を取り除くことはできませんか? 's /\\.// g'。そして、私はちょっと混乱しています。あなたはすべてのエスケープ文字を無視したいのですか?あなたの質問はあなたの例が提供するものとは異なる期待される結果を述べています。 – knittl

+0

エスケープされた文字が許可されているため、文字を取り除くことができないという問題があります。うまくいけば、混乱をクリアするために、私はメインのポストを編集します、それについて申し訳ありません!編集:私は私が選択できるようにしたいの正しい例でメインのポストを編集しました。 – Scheme

答えて

0

/(?<!\\)(%.*?(?<!\\)%)/ 

を参照してください。このRegex101.com

説明

1 - (?<!\\)%は、バックスラッシュが先行していない任意の%文字と一致します。

2から.*?が怠惰な方法

3で任意の文字にマッチする - 周辺(2)(1)バックスラッシュが付いていない%で囲まれた任意の文字にマッチします。

+0

本当にありがとう、ありがとう! – Scheme

+0

ようこそ。プロセスの理解に役立つ説明をいくつか追加しました。 –

関連する問題