次の正規表現は何をしますか?
[\w+\-.]+
上記の正規表現、\w+-。+と\w+ \-。+の出力は同じですが、理由がわかりません。
テスト文字列
sadkfj-dslk.sdjklf!sdljf
これを説明してもらえますか?
次の正規表現は何をしますか?
[\w+\-.]+
上記の正規表現、\w+-。+と\w+ \-。+の出力は同じですが、理由がわかりません。
テスト文字列
sadkfj-dslk.sdjklf!sdljf
これを説明してもらえますか?
バックスラッシュが不要なので、同じです。-
有効な文字範囲を示していない場合(つまり+-.
、文字範囲ではない場合)は、とにかく文字通りのダッシュとして扱われるため、実際にエスケープする必要はありません。
\w
指定された正規表現は、(単語文字)、+
(プラス記号)、-
(ダッシュ)、または.
(ピリオド)のいずれかの文字を1つ以上検索します。前の円記号-
は不要なので、含めるかどうかに関係ありません。
角かっこ内のハイフンには特別な意味(「範囲」)があるため、リテラルのハイフンは。としてエスケープする必要があります\-
。ただし、特定の正規表現エンジンによっては、この特定のケースではあいまいさがないため、エスケープされていない構文を使用しない場合があります。
(たとえば、Perlは両方のバージョンを受け入れ、期待される結果を生成しますが、use warnings;
バックスラッシュがないことについて文句を言います。)
これは「単語文字」[0-9a-zA-Z_](\ wは単語文字に一致)、OR +文字、ORハイフン(\は-をエスケープ)、またはピリオドに一致し、これらすべてが繰り返されます一回以上。
これは、スペースがない場合、通常の文字、アンダースコア、プラス、ハイフン、またはピリオドを含む任意の文字列と一致することを意味します。つまり、これはURLから文字列を識別してデータベースエントリを見つける機能のように思えます。
「+to。」と一致する文字がないため、-をエスケープする必要がないため、違いはありません。エスケープされているかどうかに関係なく、違いはありません。