Preg_match多行

时间:2013-11-17 15:45:56

标签: regex preg-match

我的代码有时分为两行,如下所示:

enter image description here

我正在尝试使用以下正则表达式匹配部分网址:

https://www.url.com/(.*?)">Please Click Here

我尝试在该行使用/s/m,但似乎不匹配。

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

问题在于“请点击这里”与此不匹配:

Please Click
Here

后者包含空格字符,如\n\r(可能),可能还有\t。虽然它看起来不像您发布的图像中包含\t,但最好也尝试处理该场景。 \s表达式将捕获一个简单的空格()以及每个字符。

请改用此正则表达式:

https://www\.url\.com/(?:[^"]*)(?=">Please\s+Click\s+Here)

修改:进一步调整以仅返回网址,而不是“请点击此处”和">

答案 1 :(得分:1)

对于静态网址,基本搜索模式为:

/https:\/\/www\.url\.com\/([^\"]*)\"[^>]*>\s*Please\s+Click\s+Here/

但是你最好使用$url作为变量并将其包含在正则表达式模式中,如下所示:

/<a\b[^>]*\burl=\"$url\"[^>]*>\s*Please\s+Click\s+Here\s*<\/a>/i

答案 2 :(得分:1)

您无需在此处使用s(单行)或m(多行)修饰符。

您可以使用以下简单的内容。

preg_match('~([^/]+)(?=">please\s+click\s+here)~i', $text, $match);
echo $match[1];

i修饰符用于不区分大小写的匹配。

请参阅live demo