从字符串中删除第一个元素

时间:2018-06-20 13:09:57

标签: php

我有一个由以下html组成的字符串:

<p> </p>
<h2>Content</h2>
<p>Content</p>
<h2>Content</h2>
<p>Content</p>

我如何才能完全删除第一个元素(即使它是内容),并让我剩下字符串的其余部分?

应该注意,第一个元素可以是任何东西或包含任何东西。

4 个答案:

答案 0 :(得分:3)

您可以使用DOM库:

 $document = DOMDocument::loadHTML( $yourString );
 $childToRemove = $document->getElementsByTagName('p')->item(0);
 $childToRemove->parentNode->removeChild($childToRemove);


 //get the string
 return $document->saveHTML();

答案 1 :(得分:0)

您可以在换行符上explode,并使用array_shift删除第一个元素:

$html = '<p> </p>
    <h2>Content</h2>
    <p>Content</p>
    <h2>Content</h2>
    <p>Content</p>';
$lines = explode(PHP_EOL, $html); // break into lines
array_shift($lines); // remove first element
$newHtml = implode(PHP_EOL, $lines); // rejoin lines
echo $newHtml;

答案 2 :(得分:0)

您可以使用类似这样的内容:

$split = explode("<h2>", $str);
unset($split[0]);
$str = "<h2>" + implode("<h2>", $split);

答案 3 :(得分:0)

DOM操作可能是最好的选择,但是以下正则表达式将替换其找到的标签。

[OperationContract(Name = "MyMethod")]
public CustomOutput MyMethod(CustomInput inp){}

[DataContract(Namespace = "")]
    public class CustomInput 
    {
        [DataMember(Name = "x")]
        public string x { get; set; }
    }

本质上,匹配[DataContract(Namespace = "")] public class CustomInput { [DataMember(Name = "x")] public string x { get; set; } } class Program { private const string URL2 = "http://.../MyMethod"; static void Main(string[] args) { HttpClient client = new HttpClient(); string str = JsonConvert.SerializeObject(new CustomInput () { x = "pippo" }); HttpContent content = new StringContent(str, Encoding.UTF8, "application/json"); HttpResponseMessage response = client.PostAsync(URL2, content).Result; // Blocking call! if (response.IsSuccessStatusCode) { } else { Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase); } } } 和所有内容,直到找到<[^/]*/.*> ,这样它就可以用于自闭标签,例如<或标准/.*>,但不会成功不适用于<br/>之类的未封闭HTML标记。

对于preg_replace,您可以指定第4个参数以将其限制为仅一个替换:

<p> </p>