2017-08-29 6 views
3

私はこの質問に対する答えを探していましたが、明確な答えは得られていません。Regexを使ってパターンの最初の一致を取得するだけです

MSIのGeForce GTX 1080チタンのDirectX 12のGeForce GTX 1080チタンGAMING X 11G

私は正規表現

GTX +?\d+ 
を使用しています:

私はテキストを持っています結果を返す

GTX 1080 2回

私は1つのマッチと終了をつかみたいです。

これを行う正規表現はありますか?または私は使用している言語の正規表現フレームワークを使用する必要がありますか?

+1

理論的には、最初はネガティブルックバックを使用して最初の一致を見つけることができますが、現在使用しているものを使用して最初の結果を取得する方がはるかに簡単です。 – L3viathan

+2

正規表現の味は何ですか?グローバルフラグを指定せずに検索すると、JS正規表現などの最初の一致しか得られません。 –

+4

これは、使用している言語とフレームワークによってまったく異なります。あなたが行うことができる最も正規のニュートラルなことはあなたのパターンをキャプチャグループに入れ、 '[\ s \ S] * $'を使って残りの入力を消費するだけです。 – Tezra

答えて

2

これはただ1つのマッチとグラブを終了します。わかりやすくするために、最後の試合をつかむが、それはあなたがしたいことをしている。 regex101.com

GTX +?\d+(?!.*GTX +?\d+.*$) 
+0

ありがとうMarcin。私が何をしようとしているのかの文脈で。これは完全に機能します。ありがとうございました。 – mjrice04

2

終わり$トークンはおそらく不要であることを除いて動作するはず@Tezraによって提案された方法でテスト(それはあなたが使用している正規表現の味に依存する場合があります)。 (GTX \d+)[\s\S]*DEMO

この方法は、あなたが選択した言語を使用して取得することができますキャプチャグループにあなたの最初の試合を隔離します。あなたは1つを指定しなかったので、私はそれをそのまま残します。 2番目の方法では、次のような処理が行われます。

クエリの末尾にある括弧(GTX \d+)は、最初のキャプチャグループに配置します。

[\s\S]に続く括弧内のグループは、セット内の任意の1文字に一致します。すべての文字は空白(\s)または空白(\S)でなければならないので、結果は何かが進むということです。

最後に、末尾の*量子は、文字セットの残りの部分が消費されていることを確認して、先行するセット内のゼロ以上の連続する文字と一致します。

これが役に立ちます。

+0

これはうまくいく、これは後で私がビルドしているETLパイプラインでそれを使う方法になる – mjrice04

+0

それを聞いてうれしい。あなたのプロジェクトの残りの部分と幸運! –

関連する問題