次の正規表現は何をしますか?
[\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。」と一致する文字がないため、-をエスケープする必要がないため、違いはありません。エスケープされているかどうかに関係なく、違いはありません。