2017-11-16 25 views
0

(ようにバックスラッシュをエスケープ文字として動作)バックスラッシュと単一引用符を含めるように正規表現を変更します。私は次の文字列を持っている

arg1('value1') arg2('value '')2') arg3('value\'3') 

値を抽出するための正規表現は次のようになります。

boost::regex re_arg_values("('[^']*(?:''[^']*)*')"); 

今この正規表現は'値\' 3 'を抽出することができません。どのようにして正規表現を修正して括弧の中に\ 'を含めることができますか?

FYI。値には、スペース、特殊文字、およびタブを含めることができます。コードはCPPにあります。

ありがとうございます。

+0

このように - ['( '[^'] *(?: '' [^ '] *)*' [^]] *)'](https://regex101.com/r/d3nOG2/1 )? – Gurman

+0

モバイルからの書き込みについては、「['[^ \\\\'] *(?:('' '| \\\\。)[^ \\\'] *)* ') '。改行を含む文字列がある場合は、 '.'を' [\\ s \\ S] 'に置き換えてください。 SOのコメントからコピー貼り付けすると、ガベージ文字が導入される可能性があることに注意してください。そうした場合は、目に見えない文字もチェックしてください。 –

+0

@WiktorStribiżew、 それは働いていません – hydra123

答えて

0
boost::regex re_arg_values("\('([^'\\]|''|\\.)*'\)"); 

\(''\)は境界を一致させます。与えられたパターンのいずれか

[^'\\]マッチ通常の文字を一致させるため

(|、及び)*

''は、一重引用符のペアに一致します。

\\.は、エスケープ文字(スタックバックスラッシュを含む)と一致します。

関連する問題