php preg_replace一个标签之间的文本

时间:2015-06-27 15:24:43

标签: php regex

我有一个网站,可以创建以下多种形式:

<form action="link1" method="post" >
<form action="link2" method="post" >
<form action="link3" method="post" > etc ...

现在我想要的是更改表单标记之间的整个文本,使其看起来像这样:

<form id="link">

我已经测试了许多技巧,但我无法解决我的问题。

4 个答案:

答案 0 :(得分:1)

你试过这个吗?

$mixed = preg_replace('~(<form [^>]+>)(.+?)+(</form>)~i', '$1the form HTML replacement$3', '<form method="post">the form HTML content to replace</form>');

我使用此链接对其进行测试http://micmap.org/php-by-example/en/function/preg_replace

答案 1 :(得分:1)

目前还不清楚你究竟想做什么,但你应该考虑 DOM `来完成任务。

$doc = DOMDocument::loadHTML('
     <form action="link1" method="post" >
     <form action="link2" method="post" >
     <form action="link3" method="post" >
');

foreach ($doc->getElementsByTagName('form') as $node) {
   $node->removeAttribute('action');
   $node->removeAttribute('method');
   $node->setAttribute('id', 'somelink');
}

答案 2 :(得分:0)

让我们假设您的代码生成一个数组$ links [],如下所示:

$links = array("link1", "link2", "link3"); 

所以你的代码看起来像这样:

$re = "/\\<form action=\\\"([a-zA-Z0-9_-]+)\\\" method=\\\"post\\\" \\>/"; 

foreach($links as $value)
 {

    $str = "<form action=\"$value\" method=\"post\" >"; 
    $subst = "<form id=\"$1\"> <input type=\"text\"></form>"; 

    $new_link = preg_replace($re, $subst, $str, 1);
    echo $new_link;
    echo "<br>";
 }

click here to see it in action here(如果第一个链接已死)

这里是$ re变量的详细信息:

enter image description here

希望有所帮助!

答案 3 :(得分:0)

试试这个:

preg_replace("~<form\s.*?>~i",'<form id="link">', '<form action="link3" method="post" >');