php正则表达式替换表单标记但保留一些属性

时间:2015-08-12 17:03:50

标签: php regex preg-replace

你好,我有以下代码:

preg_replace('~<form\s*.*?(?:class="(.*?)"|id="(.*?)")?>~i','<form method="post" class="$1" id="$2">', "from html source code");

我想要的是如果表单标签中有class属性或id,那么它们就会被替换。

<form method="post" class="login-css">

所以上面代码的输出将是:

<form method="post" class="login-css" id="">

如果表单标签是这样的:

<form method="post">

然后输出将是:

<form method="post" class="" id="">

1 个答案:

答案 0 :(得分:0)

替换

<form method="post"(?: class="(.*?)")?(?: id="(.*?)")?>

使用

<form method="post" class="$1" id="$2">

我有一个工具(RegexBuddy),它可以将它转换为PHP但我不会自己编程到它

$result = preg_replace('/<form method="post"(?: class="(.*?)")?(?: id="(.*?)")?>/', '<form method="post" class="$1" id="$2">', $subject);

我使用以下字符串进行测试并且它可以正常工作

zer <form method="post" class="a" id="b">  zaer zer <form method="post" class="a">   azerzer

在实践中,您可能必须使其不那么严格,并在此处和那里允许空格。