扫描第一次出现某个单词的字符串,并用php替换单词加下几个字符

时间:2016-07-06 13:09:23

标签: php string search replace

我有一个字符串:

"This is the string. My height="200" and width="200".The second height="300" and width ="300""

如何扫描字符串并获取第一个高度元素并替换它?意思是我只想抓取"height="200""并将其替换或完全删除,但如何在第一次出现时扫描文件? 另外对于我使用的实际字符串,我不知道设置的高度是什么,所以我不能只搜索它。我认为我需要找到"height="并在其后接下来几个字符并进行更改。 我知道我可以使用:

进行搜索
function str_replace_limit($search, $replace, $string, $limit = 1) {
            $pos = strpos($string, $search);

            if ($pos === false) {
                return $string;
            }

            $searchLen = strlen($search);

            for ($i = 0; $i < $limit; $i++) {
                $string = substr_replace($string, $replace, $pos, $searchLen);

                $pos = strpos($string, $search);

                if ($pos === false) {
                    break;
                }
            }

            return $string;
        }
     $search  = 'height';
        $replace = ' ';
        $string  = "This is the string. My height="200" and width="200".The second height="300" and width ="300"";


        $limit   = 1;

        $replaced = str_replace_limit(($search), $replace, $string, $limit);

返回:

This is the string. My ="200" and width="200".The second height="300" and width ="300"

找到第一个高度元素,但我不能得到它后面的字符? 有任何想法吗? 提前谢谢!

3 个答案:

答案 0 :(得分:4)

您可以使用preg_replace()和一些正则表达式轻松完成此操作。使用preg_replace()的限制选项(每个主题字符串中每个模式的最大可能替换次数。默认为-1,这是无限制的)可帮助您限制返回的匹配数。将限制设置为1将返回第一个匹配项:

$subject = 'This is the string. My height="200" and width="200".The second height="300" and width ="300"';
$search = '/(height=\")(\d+)(\")/';
$replace = 'height="450"';
$new = preg_replace($search, $replace, $subject, 1);
echo $new;

返回:

  

这是字符串。我的身高=“450”,宽度=“200”。第二个身高=“300”,宽度=“300”

正则表达式的解释:

  • 第一个捕获小组(height=\") - height=字面匹配字符height=(区分大小写) - \"匹配字符“字面上

  • 第二个捕获小组(\d+) - \d+匹配数字[0-9] - 量词:+在一次和无限次之间,多次 可能,根据需要回馈[贪心]

  • 第3个捕获小组(\") - \"字面匹配字符"

为了测试正则表达式,我使用了regex101.com来确保the regex shown有效。对于那些使用regex101.com的人来说 - 总是应用\ g修饰符(对于全局匹配),因为使用正则表达式时PHP几乎总是贪婪。

答案 1 :(得分:1)

您正在搜索简单的文字,并且不告诉您的功能它应该搜索更多内容以及如何更多&#34;更多&#34;看起来像。 要实现此目的,您需要使用preg_repalce函数descibed here。您可以使用类似的内容重新启动您的功能

function str_replace_limit($search, $replace, $string, $limit = 1) 
{
    $pattern = '/' . $search . '="(.*?)"/';

    return preg_replace($pattern, $replace, $string, $limit);
}

答案 2 :(得分:1)

使用带有preg_replace标记的limit函数可以轻松执行所需的替换(每个主题字符串中每个模式的最大可能替换。默认为-1(无限制)

$string  = 'This is the string. My height="200" and width="200".The second height="300" and width ="300"';

$replaced = preg_replace("/ height=[\"']\w+?[\"']/", " ", $string, 1);

print_r($replaced);
// This is the string. My  and width="200".The second height="300" and width ="300"