найти шаблон для URL-адреса без конечной косой черты

Я ищу шаблон preg_match_all, чтобы найти весь URL-адрес на странице, у которой нет косой черты.

Например: если у меня есть

  1. a href = "/ testing / abc /"> конец с косой чертой

  2. a href = "/ testing / test / mnl"> не заканчивается слэш

Результатом будет # 2

Благодарю.

Лучше извлеките все ссылки href с помощью DOM-анализатора и посмотрите, заканчивается ли URL-адрес косой чертой или нет. Для этого не нужно никакого регулярного выражения.

Для решения regex для приведенных примеров вы можете использовать это регулярное выражение:

/href=(['"])[^\s]+(?<!\/)\1/ 

Демо-версия: http://www.rubular.com/r/f2XJ6rF5Fb

Объяснение:

 href= -> match text href= (['"]) -> match single or double quote and create a group #1 with this match [^\s]+ -> match 1 or more character until a space is found (?<!\/) -> (negative lookbehind) only match if is not preceded by / \1 -> match closing single or double quote (group #1) 

Действительно, используйте парсер DOM [ почему? ] . Вот пример:

 // let's define some HTML $html = <<<'HTML' <html> <head> </head> <body> <a href="/testing/abc/">end with slash</a> <a href="/testing/test/mnl">no ending slash</a> </body> </html> HTML; // create a DOMDocument instance (a DOM parser) $dom = new DOMDocument(); // load the HTML $dom->loadHTML( $html ); // create a DOMXPath instance, to query the DOM $xpath = new DOMXPath( $dom ); // find all nodes containing an href attribute, and return the attribute node $linkNodes = $xpath->query( '//*[@href]/@href' ); // initialize a result array $result = array(); // iterate all found attribute nodes foreach( $linkNodes as $linkNode ) { // does its value not end with a forward slash? if( substr( $linkNode->value, -1 ) !== '/' ) { // add the attribute value to the result array $result[] = $linkNode->value; } } // let's look at the result var_dump( $result );