0

次のregを定義しました。ブースト正規表現ライブラリを使用した式

"([[:digit:]]{1,})([[:blank:]]*\\[label=\")([[:print:]]*)(\\([[:print:]]*\\)\\([[:print:]]+\\))(\"];)"

regex_search興味のあるデータを抽出するために使用しmatch[3]ます:結果を含む次の文字列で成功しますMulOp

0 [label="MulOp(   text1 )(depth =1)"];

CALL( %text1しかし、以下の文字列では失敗し、結果のみを取得したい場合に結果が見つかりますCALL

8 [label="CALL(   %text1(text2) text3 )(depth =2)"];

両方のケースに一致する一般的な正規表現を定義する方法を教えてください

4

1 に答える 1

1

問題は、ターゲット文字列の "(text2)" にあります。'('これにより、最初に存在しない文字が追加されるため、([[:print:]]*)は最初の を食べ'('ます。'('その最初の一致から除外する必要があります。構文([^(]*)が常にターゲット名の直後に'('. 探しているものが何であるかを実際に定義していないため、それを超えて言うのは難しい. (たった 2 つの例で、必要なものを一致させるのは些細なことであると示唆することで、これを矮小化するつもりはありません。「MulOp」と「CALL」を検索し、どちらかが存在する場合はそれを返します)

于 2013-02-03T20:45:12.560 に答える