2017-06-01 3 views
1

文の最初のピリオドまですべての怠惰な正規表現マッチを取得しようとしています。正規表現はすべて最初のピリオドまで一致します

ちょうど "ジャックとジル"を取得したい。この文より:
"ジャックとジルは丘を登ってペールを取る"

/.+\./は一致して文全体(example
/(.+?\.)/マッチ各インスタンス(example

はちょうど最初のインスタンスを一致させる方法はありますか?

+0

デモサイトでは、キャレット '^(。+?\。) 'を使用します。 – revo

+0

2番目のパターンで' match'メソッドを使います。 –

+0

@revoが答えたものと同様に、キャプチャグループに一致するようにしたい場合を除き、括弧[demo](https://regex101.com/r/tzaQhs/1/)を使わなくてもかまいません。 – SWLim

答えて

3
/^([^.]+)/ 

  • ^、のは、それを打破してみましょう、これは期間まで取る期間

  • \+ない任意の文字にマッチ改行アンカー

  • [^.]ある

そして式は()でカプセル化されてキャプチャされます。

+1

* "^は文字列アンカーの先頭です" *:いいえ、間違っています。Rubyの '^'は、文字列ではなく、行頭にマッチします。文字列の先頭のアンカーは '\ A'です。 –

+1

角括弧の中に' .'がある場合、エスケープする必要はありません。 '[\。]'は '[。]'と同じです。 (そして否定的なカラットはこれを変えない) – CAustin

+0

あなたは正しいです、私はコンセプトが一緒にブレンドされるように\ Aを使用する理由はありません。これを反映するように更新されました。 –

1

最初のオカレンスだけが必要な場合は、文字列内のすべての結果を返すscanメソッドを選択しないでください。

> "jack and jill. went up the hill. to fetch a pail."[/.+?\./] 
=> "jack and jill." 
0

私は正規表現を使用するように傾斜させることだろうが、他のオプションがあります:あなたはMatchDataインスタンスを返しますが、あなたは、単に書くことができます一致方式を使用することができます。

関連する問題