私はこの文字列を一致させようとしています:
テキスト1819テキスト
この正規表現で:
\s+\d\d\s+
文字列は2桁で、それぞれが先頭と末尾のスペースで囲まれています。
だから私は考えています-これは私に18と19を与えるはずですよね?そうではありません、それは私に18だけを与えます。
私はここでこのテスターでテストしています:http://java-regex-tester.appspot.com/
ありがとう!
私はこの文字列を一致させようとしています:
テキスト1819テキスト
この正規表現で:
\s+\d\d\s+
文字列は2桁で、それぞれが先頭と末尾のスペースで囲まれています。
だから私は考えています-これは私に18と19を与えるはずですよね?そうではありません、それは私に18だけを与えます。
私はここでこのテスターでテストしています:http://java-regex-tester.appspot.com/
ありがとう!
2 番目の項目と一致しない理由は、 と の間のスペースが18
最初の一致の末尾によって19
消費されるためです。たとえば、先読み構文またはゼロ幅境界のトークンを\s+
使用して、末尾の空白に対して非消費のゼロ幅正規表現を作成する必要があります。
\s+\d\d(?=\s+)
代わりにこれを使用してください:
\b\d\d\b
最初の一致がすでにすべてのスペースを「食べ尽くしている」ため、正規表現は 2 番目の数字と一致しません。
一方、\b
は「単語境界」であり、幅がゼロの (メタ) 文字として知られているものです: 一致している間は何も「食い尽くす」ことはありません。
最初の解析出力は「 18 」で、残りの文字列は「 19 Text 」で一致しないためです。