0

次の正規表現は何をしますか?

[\w+\-.]+

上記の正規表現、\w+-。+と\w+ \-。+の出力は同じですが、理由がわかりません。

テスト文字列

sadkfj-dslk.sdjklf!sdljf

これを説明してもらえますか?

4

3 に答える 3

3

バックスラッシュが不要なので、同じです。-有効な文字範囲を示していない場合(つまり+-.、文字範囲ではない場合)は、とにかく文字通りのダッシュとして扱われるため、実際にエスケープする必要はありません。

\w指定された正規表現は、(単語文字)、+(プラス記号)、-(ダッシュ)、または.(ピリオド)のいずれかの文字を1つ以上検索します。前の円記号-は不要なので、含めるかどうかに関係ありません。

于 2012-05-25T14:27:27.290 に答える
2

角かっこ内のハイフンには特別な意味(「範囲」)があるため、リテラルのハイフンは。としてエスケープする必要があります\-。ただし、特定の正規表現エンジンによっては、この特定のケースではあいまいさがないため、エスケープされていない構文を使用しない場合があります。

(たとえば、Perlは両方のバージョンを受け入れ、期待される結果を生成しますが、use warnings;バックスラッシュがないことについて文句を言います。)

于 2012-05-25T14:28:39.943 に答える
1

これは「単語文字」[0-9a-zA-Z_](\ wは単語文字に一致)、OR +文字、ORハイフン(\は-をエスケープ)、またはピリオドに一致し、これらすべてが繰り返されます一回以上。

これは、スペースがない場合、通常の文字、アンダースコア、プラス、ハイフン、またはピリオドを含む任意の文字列と一致することを意味します。つまり、これはURLから文字列を識別してデータベースエントリを見つける機能のように思えます。

「+to。」と​​一致する文字がないため、-をエスケープする必要がないため、違いはありません。エスケープされているかどうかに関係なく、違いはありません。

于 2012-05-25T14:32:05.840 に答える