正規表現が正しくありません。
最初の「場所」の前に出現する単一の「単語」が必要な場合は、次を使用できます。
"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