2011-11-23 13 views
0

は、私は引用符内部のグループを見つけるために、この非貪欲1文字に一致正規表現

'(?<C2>.+?)' 

のような非欲張りマッチをやっています。私のように言葉で次のよう、スペースに続く引用符で何かを一致させるために、この

'(?<C2>.+?)' as 

のような何かをしたいまで、これが、うまく動作します。

しかし、今、次のように私はこれが全く一致していたい...しかし、それは全体のチャンクにC2

として

'hello'123'hello2' 

に一致終わる希望

'hello'123'hello2' as 

と一致しません。

非貪欲の.+?に、最初の出現を'まで含めるようにするにはどうすればいいですか?最初の発生は0ではありません

答えて

2

これは

(?<C2>'[^']+')(?= as) 

説明

NODE      EXPLANATION 
-------------------------------------------------------------------------------- 
    (?<C2>     group and capture to C2: 
-------------------------------------------------------------------------------- 
    '      '\'' 
-------------------------------------------------------------------------------- 
    [^']+     any character except: ''' (1 or more 
          times (matching the most amount 
          possible)) 
-------------------------------------------------------------------------------- 
    '      '\'' 
-------------------------------------------------------------------------------- 
)      end of \1 
-------------------------------------------------------------------------------- 
    (?=      look ahead to see if there is: 
-------------------------------------------------------------------------------- 
    as      ' as' 
-------------------------------------------------------------------------------- 
)      end of look-ahead 

を動作するようです期待通りであっても先読み(?= as)せず、(?<C2>'[^']+')は非貪欲な方法で文字列を引用符で囲まれた一致します。

+0

これは、グループを正しく一致させます...しかし、正規表現のマッチをすべて失敗させるにはどうしたらいいですか? – Jeff

2

試すことができます。

'(?<C2>[^']+?)' as 
0

私はあなたの質問をこれまでの回答者とは違うと思っています。 By

貪欲でない+を強制する最も良い方法は何ですか? 、あなたが最初の2 '間の単語に一致するように望んでいたと言うことを意味しなかった

として「のではなく、最初のoccurance」の最初のoccuranceまで、すなわち hello、ない hello2を含めるには?その場合には、これが私の提案です:

'(?<C2>.+?)'(?! as) 

否定先読みはあなたがas前に来る単語と一致しないことを保証します。

ご要望が間違っている場合は、ごめんなさい。

関連する問題