正規表現が正しくありません。
最初の「場所」の前に出現する単一の「単語」が必要な場合は、次を使用できます。
"This is sample text located at first line and located at second line."[/(\S+)\s+located at/, 1]
=> "text"
「単語」は、を使用して空白以外の文字を意味するように定義している\S
ため、句読点と数字は英字に含まれます。\w
必要に応じて、他のクラスを使用することもできます[A-Za-z0-9_]
。[a-z]
それ以外の場合は、次のように使用します。
"This is sample text located at first line and located at second line."[/([a-z]+)\s+located at/i, 1]
=> "text"
「サンプル」と最初の「場所」の間にあるテキストが必要な場合は、次を使用できます。
"This is sample text located at first line and located at second line."[/sample\s+(.+?)\s+located at/, 1]
=> "text"
あなたのパターン/test.*sample(.*)located at?/
では、複数を使用しています。.*
これは、ゼロ以上のものを意味します(ただし、コンテキストによっては実際には何もありませんが、今必要なものよりも深いです)。それは貪欲なので、その「もっと」はあなたが衝突している部分です。そして、それを2回使用するので、それは二重に貪欲です。を追加することで「欲張りでない」バリアントを使用できます?
が、正規表現エンジンにロープを与えすぎて遊ぶことができないため、それでも正しく機能しません。私のパターンはそれをすべて引き締め?
、最初の2つで修飾子を使用する必要性を減らします。
私の3番目の例では、.+
これも必要です。これも、貪欲であり、モデレートする必要があるためです。
最後に、パターンが変更にat?
適用されていない場合、前のパターンに作用しているため、エンジンは「ゼロまたは1の「t」を見つける必要があります」ということになります。これは、一致するため、必要なものではありません。 「a」または「at」。?
.*
t