は、誰もが説明できますか?最初の例では、テキストは1つ以上のスペースを削除しないで、2番目の例ではテキストを削除します。正規表現の違い
Q
正規表現の違い
0
A
答えて
1
String.replaceAll
メソッドは文字列を1回だけ解析し、\W
にはすでに\s
が含まれています。そのため、ブランチは、最初のコードでは決してテストされません(左の最初のブランチ)。
2番目のコードでは、文字列全体が別の時刻に\s+
で解析されます。
-1
\W
は、空白文字を含む単語以外の文字([^a-zA-Z0-9_]
)を意味します。
したがって、最初のパターンでは、\s+
の部分は冗長です.1つの空白文字に一致し、それを" "
に置き換えます。 JavaのreplaceAll
メソッドは、文字列を1回だけ解析します。
0
REGEXP:
\w <= [^a-zA-Z0-9_] and whitespace
\d <= numbers
\s+ {
\s <= whitespace
+ <= 1 or more...
}
例:(+)
\w+ <= [^a-zA-Z0-9_] and whitespace(1 or more)
\d+ <= numbers(1 or more)
結果: "\ W +" の
hello123 => hello
結果:用
hello123 => hello123
をお楽しみください "\ + \ D + W": "\ dの+"
hello123 => 123
結果について。
1
最初の例では、\ Wはそれぞれのスペースを取ります(したがって\ s +はありません)ので、スペースで置き換えます。 それでも2番目の例では起こりますが、\ s +は\ W | \ dの後に別々に動作し、多くのスペースを1つのスペースのcharに折り畳みます。
try try text。でReplaceAll( "[\\ W \\ D \\ S] +"、」「)
1
あなたの最初の例:\W|\d|\s+
試合:
- つの非単語文字(
\W
) - OR 1桁の文字(
\d
) - または1または-以上のスペース(
\s+
)
それは怠け者だOR、そのそれぞれが '' \W
と一致し、置き換えられます。
おそらく(\W|\d|\s)+
が必要で、グループ全体が繰り返されます。ただし、\s
は\W
に含まれているため、ここでは冗長です。単一文字の場合
は、それが|
ではなく文字クラスを使用するために、通常は簡単です:
[\W\d]+.
関連する問題
- 1. 正規表現の違い
- 2. PHPの正規表現の違い
- 3. 'RegExp'と正規表現の違いは?
- 4. IIS UrlRewrite正規表現の違い
- 5. 正規表現で$ 1と$&の違い
- 6. [af]?lex正規表現の違い
- 7. は違い*正規表現でJava
- 8. 正規表現の正規表現の正規表現
- 9. 正規表現の正規表現と ' -
- 10. 正規表現の正規表現データ
- 11. 正規表現の正規表現
- 12. C#正規表現の正規表現
- 13. 正規表現用の正規表現
- 14. 正規表現は私の正規表現と多分間違っ
- 15. マッパーの間違った正規表現
- 16. C#の間違った正規表現
- 17. 正規表現 - 正規表現
- 18. 。NET正規表現(正規表現)
- 19. 正規表現 - 正規表現
- 20. 正規表現(正規表現)Java
- 21. (?=正規表現)VS(?:正規表現)
- 22. パイソン - 間違ったエンコーディング、正規表現
- 23. preg_match正規表現の正規表現を持つ正規表現
- 24. 正規表現正規表現と異なるハイブ正規表現ですか?
- 25. 正規表現に一致しない正規表現
- 26. 正規表現は間違った表現にマッチする
- 27. 正規表現の^と\ A、$と\ Zの違いは何ですか?正規表現で
- 28. 正規表現:表現
- 29. 正規表現表現
- 30. 正規表現表現
おかげで、しかし、\ S +は最初のものであるとき、それはまだ動作しません。 – Helosze
@Helosze:明らかに '\ W'と数字の文字はスペースで置き換えられていないので、 1回のパスで同じ結果を得るには、 '[\\ W \\ d] +' –
okですが、状況は - text [space] [space] [space] text - 3つのスペースを\ sで1つのスペース? – Helosze