不能使preg_match正确!

时间:2010-12-02 17:49:44

标签: php regex

我在HTML页面中有这个链接。

<img id="catImage" width="250" alt="" src="http://dev-server2/image2.png" />

我希望获得src的价值,并且与preg_match以及所有这些正则表达式的东西不相处。这是对的吗?

preg_match(
    "/<img id=\"catImage\" width=\"[0-9]+\" alt=\"\" src=\"([[a-zA-Z0-9]\/-._]*)\"/",
    $artist_page["content"], $matches);

我得到一个空数组!

5 个答案:

答案 0 :(得分:1)

这有用吗?

'/<img id="catImage"[^>]+src="([^"]*)"/'

答案 1 :(得分:1)

首先,正则表达式中处理src属性的部分不会考虑URL中显示的冒号。

我建议更改src部分(以及任何其他属性值)来代替关闭引用并捕获之间的所有内容:

... src = \“([^ \”] *)\“....

答案 2 :(得分:0)

"/<img id=\"catImage\" width=\"[0-9]+\" alt=\"\" src=\"([a-zA-Z0-9/.:_-]*)\"/"

应该这样做。请注意,我编辑了范围[ ... ]部分。连字符(-)具有特殊含义,因此我最后将其添加为范围内的文字。另外,我添加了:字符(感谢@ user333699)。但是,这暗示您不应该尝试考虑任何有效的URL字符。相反,匹配任何内容,直到您知道 src属性的整个值匹配为止:

"/<img id=\"catImage\" width=\"[0-9]+\" alt=\"\" src=\"([^\"]*)\"/"

即,任何引用的内容(")。

答案 3 :(得分:0)

我仍然对正则表达式很新,但我想我会把我的想法抛到那里并受到一些批评。表达式应该是(?<=(src=")).*(?=["])吗? (还不是PHP格式化的)。这将获取src属性的内容。

答案 4 :(得分:0)

请注意,为了获得src的值,你必须在preg_match之后执行额外的计算,因为你的匹配将返回整个标记。

根据你真正想用它做什么,可能值得潜入XPath