これは私のテキストです:マッチオールパーツですべての正規表現マッチを見つけるには?
["hello foo-1", "hello bar $4", ...]
これを達成するためにscan()
に供給する正規表現とは何か:
hello foo-1 hello bar $4 hello ...
私は/hello .*/
に一致するすべてのものを見つける必要がありますか?
これは私のテキストです:マッチオールパーツですべての正規表現マッチを見つけるには?
["hello foo-1", "hello bar $4", ...]
これを達成するためにscan()
に供給する正規表現とは何か:
hello foo-1 hello bar $4 hello ...
私は/hello .*/
に一致するすべてのものを見つける必要がありますか?
使用先読み基づいて正規表現とsplit
:(?=hello)
肯定先読みは、文字列内の各hello
の前に位置で文字列を分割します
'hello foo-1 hello bar $4 hello'.split(/(?=hello)/)
。
あなたは、パターンの開始時に\s*
を追加末尾の空白(もしあれば)を取り除くために必要がある場合:
.split(/\s*(?=hello)/)
はRubular demoとonline Ruby code demoを参照してください。
私は、 ''スキャン 'の解決策を使って編集しようとしていました - ['s.scan(/ hello(?:hello))*/m)'](https://ideone.com/EdxdrH)私はまだ「分割」が正しいと信じています。 –
これは "hello"と "helloween"を区別しません。また、「hello」以外の文字列で始まる文字列も許可されません(たとえば、「hello ...」など)。この例以外にも、OPはその可能性を否定していましたが、 'scan'を使用すると問題はありません。 –
@Cary単語境界を追加することはロケット科学ではありません。このソリューションは、それ以上の要件に対応するのに十分な柔軟性を備えています。 –
正規表現のない別の方法があります。それはslice_before
を使用しています。?
"hello foo-1 hello bar $4 hello".split.slice_before("hello").map{|words| words.join(' ')}
# => ["hello foo-1", "hello bar $4", "hello"]
"hello helloween hello halloween".split.slice_before("hello").map{|words| words.join(' ')}
# => ["hello helloween", "hello halloween"]
上記の私のコメントも同様に適用されます。 –
@CarySwovel私はそれが分からない: '' hello helloween hello halloween ".split.slice_before(" hello ")。map {| words | words.join( '') '' returns '[" hello helloween "、" hello halloween "]' –
@CarySwoveland: "hello"と言うと、それはセパレータに問題があります。何とかそれをエスケープする必要があります。 –
'ハロー\ + S *(?=ハロー| $)' https://regex101.com/r/OCbf83/1 –
@AvinashRaj、その答えをしてください。 –