获取两个子字符串之间的href值[重复]

问题描述 投票:0回答:2

我正在尝试捕捉以下模式:

<a href="http://cdn.xyz.com/media/info.pdf" target="_blank">

这就是我正在尝试的:

preg_match_all( '/(<[a-zA-Z]+[^>]+>)/ism', $str, $matches);

这并未捕获上述模式。

我该如何重构模式?

php regex text-extraction
2个回答
1
投票

您可以使用基于正则表达式的否定前瞻断言。

preg_match_all('~<[a-zA-Z]+(?:(?!&[lg]t;).)*>~isg', $str, $matches);

(?:(?!&[lg]t;).)*
匹配任何字符,但不匹配
<
>
的字符。也就是说,它检查要匹配的字符是否不是
<
>
中的起始字母。

<[a-zA-Z]+.*?>

1
投票
(<[a-zA-Z]+.+?>)

您可以使用这个简单的模式。请参阅演示。

https://regex101.com/r/bW3aR1/14

你的正则表达式包含

[^>]+
,这不是你想象的那样。它只是一类不应该出现的字符。这里没有定义顺序。

© www.soinside.com 2019 - 2024. All rights reserved.