我有一个字符串:
"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"
找到第一个高度元素,但我不能得到它后面的字符? 有任何想法吗? 提前谢谢!
答案 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"