Как указано @JasonWoof, вам нужно использовать встроенную альтернативу: одна альтернатива для цитируемых URL-адресов, другая для не цитируемых.Я также рекомендую использовать группу захвата, чтобы определить, какой тип цитаты используется, как это сделал @DanHorrigan.С добавлением отрицательного взгляда ((?!\\2)
) и притяжательных квантификаторов (*+
) вы можете создать очень надежное регулярное выражение, которое также очень быстро:
~
<a\\s+[^>]*?\\bhref=
(
(["']) # capture the opening quote
(?:(?!\\2).)*+ # anything else, zero or more times
\\2 # match the closing quote
|
[^\\s>]*+ # anything but whitespace or closing brackets
)
~ix
См.это в действии на ideone. (Удвоенные обратные слеши вызваны тем, что регулярное выражение написано в форме heredoc PHP. Я бы предпочел использовать nowdoc, но ideone, очевидно, все еще работает на PHP 5.2.)1010 *