preg_replace替换所有匹配

时间:2012-07-23 08:04:21

标签: php regex forms preg-replace

您好我正在创建一个替换的生成器表单 我有一些CSS代码...它会找到所有的 class和id以及dot和place .class 在他们面前...

现在它只取代了第一场比赛 我已将限制设置为-1 ...为什么忽略它?

HTML:

<form action="get_html.php" method="post" id="form">
    html:<textarea rows="50" cols="80" id="html_box" name="html" type="text" align="texttop"></textarea>
    <input id="button" type="submit" value="submit"></input>
</form>

get_html.php

<?php 
    $html= $_POST["html"]; 
    $string = (string)$html;
    $patterns = array();
    $patterns[0] = '/^[.]/';
    $patterns[1] = '/^[#]/';
    $patterns[2] = '/,/';
    $replacements = array();
    $replacements[0] = '.class .\1';
    $replacements[1] = '.class #\1';
    $replacements[2] = ', .class \1';
    $str= preg_replace($patterns,$replacements, $string, -1);
?>
<textarea rows="50" cols="80"><?php echo $str; ?></textarea>

1 个答案:

答案 0 :(得分:2)

您的前两个正则表达式只能在字符串的开头匹配(^只在每行的开头匹配(如果您使用/m修饰符)。

但是那些正则表达式可能不会做你想让他们做的事情。现在你正在寻找一个点或一个哈希,但前提是它们是字符串/行(或任何逗号)的第一个字符,并用.class和它们自己替换它们。 \1没用,因为你的正则表达式中没有捕获组。