2012-01-11 10 views
1

環境:Visual Studio 2008 sp1regex match "target string"

誰かがRegexに従うのを手伝ってもらえますか?

私はのターゲット文字列に到達しようとしています。パターンは、あなたの角括弧をエスケープする必要があるか、あるいはそれらは文字クラスを作成すると誤解されます[名] =」 '

/*Input String*/ 
SET [blah] = 'AE', [blah] = 'A1A', [number] = 004 WHERE [name]='target string' 


/*Current Regex*/ 
(?<=[?name]?=).*(?=\') 

/*Current Results*/ 
'AE', [blah] = 'A1A', [number] = 004 WHERE [name]='target string 

/*Desired Results*/ 
'target string 

答えて

1

これはそれですか?

(?<=\[name]=).*?(?=') 

またはターゲット文字列は「:

(?<=\[name]=').*?(?=') 

注:私は対象の文字列がアポストロフィをエスケープしていないことを前提にしている()をリードせずに返却しなければならない場合(」 ')。


EDIT:このエスケープアポストロフィとトリックん:

(?<=\[name]=)(''|.)+?(?='([^']|$)) 

それは "'John''s pubは"

SET [blah] = 'AE', [blah] = 'A1A', [number] = 004 WHERE [name]='John''s pub' 
+0

にOPの正規表現は、オプションとして角括弧を持っていたでしょうし、私はこれが意図的であることをかなり確信しています。これは、SQLServerのUPDATEステートメントのように見えますが、フィールド名は角カッコで囲む必要はありません。 – ruakh

+0

はい、?ブラケットをオプションにします。 –

+0

「しない」と「しない」が成立します。 (私はあなたの提案正規表現が間違っていると思っていると言っています) – ruakh

3

間の任意の文字列です。それはあなたが必要とする、次のとおりです。

(?<=\[?name\]?=).*(?=\') 

私はまた、あなたがターゲット文字列の後に何もを引くリスクはありませんちょうどので、より明示的な'[^']*.*を変更するお勧めします。 Tim Pietzckerは\'の代わりに'(正規表現の末尾付近)を書くことができることを(今削除されたコメントで)指摘しています。 so:

(?<=\[?name\]?=)'[^']*(?=')