在正则表达式中获取模式

Getting a pattern in regex

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

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

这就是我正在尝试的:

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

这没有捕捉到上述模式。

我应该如何重组模式。

谢谢

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

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

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

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

DEMO

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

您可以使用这个简单的 pattern.See 演示。

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

你的正则表达式包含 [^>]+ 这不是你 think.It 只是一个 class 字符不应该 appear.The 这里没有定义顺序。