修改html中的所有链接以仅保留主题标签

时间:2014-08-20 05:47:25

标签: php regex

在html文件中我有像

这样的链接

<a href="index_split_037.xhtml#id145937_n22">

如何在完成

的过程后对其进行全部修改

<a href="#id145937_n22">

基本上,我只需要保留主题标签。

3 个答案:

答案 0 :(得分:1)

正则表达式:

(<a href=")[^#]*([^>]*>)

替换字符串:

\1\2

DEMO

示例:

<?php
$mystring = "The input string foo <a href=\"index_split_037.xhtml#id145937_n22\"> bar";
echo preg_replace('~(<a href=")[^#]*([^>]*>)~', '\1\2', $mystring);
?>

输出:

The input string foo <a href="#id145937_n22"> bar

<强>解释

  • (<a href=")字符串<a href="由第1组捕获。
  • [^#]*匹配任何不属于#零次或多次的字符。找到符号#后,正则表达式引擎会停止匹配操作。
  • ([^>]*>)同样,下一个>符号的下列字符将被第2组捕获。
  • 在替换部分中,我们将匹配的字符替换为捕获的组内的字符。

答案 1 :(得分:0)

 (.*?")(?:.*?)(#.*)

参见演示。

http://regex101.com/r/yM7jY2/1

答案 2 :(得分:-1)

您可以使用ob_start来捕获输出,使用preg_replace来更改href属性:

<?php

ob_start(); // Capture the output

?>

<!--- Links --->
<a href="index_split_037.xhtml#id145937">Link 1</a>
<a href="index_split_038.xhtml#id147_n22">Link 2</a>
<a href="index_split_039.xhtml#id_n22">Link 3</a>
<a href="index_split_040.xhtml#145937_n22">Link 4</a>

<?php

$output = ob_get_contents(); // Get the output
ob_end_clean(); // Finish capture

// Remove the letters in href attribute before the hash # maintaining the others attributes
echo preg_replace('/<a(.*)href="([^"#]*)#([^"]*)"(.*)>/','<a$1href="#$3"$4>', $output);

?>

请参阅regexp:http://regexr.com/39bmb。 了解示例的工作原理:SandBox example