0

私はこの正規表現を持っています:

preg_match_all("/<a\s.*?href\s*=\s*['|\"](.*?)(?=#|\"|')/si", $data, $matches);

すべての URL を検索するには問題なく動作しますが、疑問符のみの URL を検索するように変更するにはどうすればよいですか?

例:

<a href="http://site.com/index.php">0</a><a href="http://site.com/index.php?id=1">1</a><a href="http://site.com/calc/index.php?id=1&scheme=Venus">2</a><a href="http://site.com/catalogue/data.php">3</a>

そしてpreg_match_all戻ります:

http://site.com/index.php?id=1

http://site.com/calc/index.php?id=1&scheme=Venus

4

3 に答える 3

1
preg_match_all("@<a\s*href\s*=[\'\"]([^\'\"]+\?[^\'\"]+)[\'\"]@si", $data, $matches);

これを試して。

于 2013-06-15T06:53:17.650 に答える
0

すべてを 1 つの正規表現で実現しようとしないでください。既存の方法を使用し、返された URL に疑問符が含まれているかどうかを個別に確認します。

ただし、 HTML の解析に正規表現を使用しないでください。正規表現を使用して HTML を確実に解析することはできません。今後、悲しみとフラストレーションに直面することになります。HTML が予想から変更されるとすぐに、コードが壊れます。既に作成、テスト、デバッグされた PHP モジュールで HTML を適切に解析する方法の例については、http://htmlparsing.com/phpを参照してください。

于 2013-06-15T05:43:47.537 に答える
0

Andy Lester が正しいことを答えてくれました。

ただし、正規表現は次のとおりです。

<a\s.*?href\s*=\s*['|\"](.*?\?.*?)(?=#|\"|')

ここに見られるように:

http://rubular.com/r/LHi11VMMR9

于 2013-06-15T05:44:46.323 に答える