2017-08-12 2 views
1

たとえば、次のように置き換えることができます。正規表現を使用して例: * <anytext> * emph {anytext}は正規表現を使用していますか?

\emph{anytext} 

によって

*<anytext>* 

少なくとも6つの一般的な説明を読んでいますが、キャプチャグループのうち4つはスタックオーバーフローであり、何か間違っています。

私は

Find what:  \*(?:.*?)\* 
Replace with: \emph{\1} 

を思い付いたが、それは私が何をしないのです

\emph{} 

によって

*blablah* 

を置き換え?

答えて

2

あなたはほとんどそこにいる - 唯一欠けているのはキャプチャグループです。

(?: ...)コンストラクトは、グループをキャプチャしないようにします。このため、\1式を使用してこのグループを参照できなくなります。この問題を解決するために、それは「プレーン」キャプチャグループにするために?:を削除します。

Find what:  \*(.*?)\* 
Replace with: \emph{\1} 

注1:特別なマーカー文字まで一致する文字へのより良いアプローチは.*?の代わりに[^*]*を使用することです。これにより、より複雑な式でcatastrophic backtrackingを避けることができます。

Find what:  \*([^*]*)\* 

注2:

Replace with: \emph{$1} 
私はメモ帳が++グループ参照のために $の代わり \を使用して考えます
2
Find: \*(.*?)\* 
Replace: \\empth{$1} 

ないメモ帳++で\\\empth中)をエスケープする必要があります確認してください。

?:は、カッコの内容がキャプチャされないため、後で置換式で使用できないことを意味します。あなたはそれを削除する必要があります。

関連する問題