私はいくつかの正規表現コードを書いています。文字列がテキストに表示される最初のインスタンスのみを検索するにはどうすればよいですか。たとえば、テキストに表示される最初の番号を検索したい場合(他の番号は気にせず、強調表示したくない)、正規表現でそれを指定するにはどうすればよいですか?
私は生の正規表現コードを作成し、Rubular.comやregexpal.comなどのオンラインテスターでテストしています。
これがデフォルトでの正規表現の動作方法です。通常、グローバルオプションを提供するか、特定の関数を使用してすべての一致を検索する必要があります。
したがって、正規表現を使用し\d+
て1つ以上の数字を検索する場合、正規表現エンジンは最初の数字のグループ(最初の数字)までしか一致しません。
プログラミング言語の代わりにオンラインツールまたはテキストエディタを使用している場合はそうではない可能性があることに注意してください。それでも問題が解決しない場合は、正規表現検索の実行方法を指定してください。
次の正規表現を使用して、最初のキャプチャグループの最初の番号を取得し、他のものと一致させないようにすることができます。
^[^\d]*(\d+)
説明:
^ # start of string
[^\d]* # match zero or more non-digit characters
(\d+) # match one or more digits and place them in the first capture group
正規表現指向エンジンを使用するほとんどの正規表現ツールは、常に左端の一致を返します。
エンジンは一致を報告することに「熱心」であるため、正規表現指向エンジンは常に左端の一致を返します。エンジンは、「より良い」一致があるかどうかを確認するために、このポイントを超えて進むことはありません。最初の試合は十分に良いと見なされます。
ただし、正規表現エンジンを使用するツール(Notepad ++、EditPad、その他数百万など)では、すべての一致を強調表示するように構成されています。(これはテキストエディタにとって意味があります)(これはほとんどのオンライン正規表現テスターにも当てはまります)。
問題を解決するために、.NET RegexライブラリなどのRegexライブラリを使用している場合は、Regex.Matchを使用して、最初に一致したオカレンスを取得できます。
たとえば、C#の場合:
string regexPattern = "\d";
string inputText = @"Ka3jf7we8ewdv";
Regex r = new Regex(regexPattern);
Match m = r.Match(inputText);
Console.WriteLine(m.Value);