1

この正規表現を使用して、URL をさまざまな部分に解析しようとしています。

([\w\\.-]*)

URL の例としてhttp://www.foo.com/bar/bazを指定すると、preg_match_all() からこれらの結果が得られます。

Array
(
[0] => Array
    (
        [0] => http
        [1] => 
        [2] => 
        [3] => 
        [4] => www.foo.com
        [5] => 
        [6] => bar
        [7] => 
        [8] => baz
        [9] => 
    )

)

無効な文字を空のアイテムに解析しているようです。
これを解決するにはどうすればよいですか?

4

3 に答える 3

6

を使用*すると、空のグループがキャプチャされます -+代わりに使用してください:

([\w\.-]+)

RE の余分な \ は、引用符で囲まれた文字列内にあるためだと思います。

于 2009-07-27T08:50:34.607 に答える
0

本当に欲しい\\.ですか?

言い換えれば、あなたが投稿した内容から、意図したようにピリオドではなくバックスラッシュをエスケープしたように見えます。編集:整頓のために、冗長なエスケープを削除しても害はありませんが、これは実際の問題ではありません[blixtが指摘したように-ありがとう]。

The Regulator を正規表現デバッグ ツールとして強くお勧めします [ただし、.NET 正規表現に基づいているため、PHP の作業には理想的ではありませんが、マッチングが動作している基礎を特定できるツールがあるという一般的なポイント]

範囲内のバックスラッシュで何をしたいのかまだわかりません。質問で使用する最終的な正規表現を投稿できますか? そして、この答えが気を散らして申し訳ありません!

編集:ブリクストが指摘したように、私が提案したように、ピリオドはメタ文字として機能しません。

于 2009-07-27T08:48:35.500 に答える