Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Split text into array elements based on opening and closing HTML tags

I have a string such as the following:

Are you looking for a quality real estate company? 

<s>Josh's real estate firm specializes in helping people find homes from          
[city][State].</s>

<s>Josh's real estate company is a boutique real estate firm serving clients 
locally.</s> 

In [city][state] I am sure you know how difficult it is
to find a great home, but we work closely with you to give you exactly 
what you need

I would like to have this paragraph split into an array based on the <s> </s> tags, so I have the following array as the result:

[0] Are you looking for a quality real estate company?
[1] Josh's real estate firm 
    specializes in helping people find homes from [city][State].
[2] Josh's real estate company is a boutique real estate firm serving clients 
    locally.
[3] In [city][state] I am sure you know how difficult it is
    to find a great home, but we work closely with you to give you exactly 
    what you need

This is a regex I'm currently using:

$matches = array();
preg_match_all(":<s>(.*?)</s>:is", $string, $matches);
$result = $matches[1];
print_r($result);

But this one only returns an array containing the text found between <s> </s> tags, it ignores the text found before and after these tags. (In the example above it would only return the array elements 1 and 2.

like image 675
Ali Avatar asked Aug 07 '26 15:08

Ali


1 Answers

The closest I could get was using preg_split() instead:

$string = <<< STR
Are you looking for a quality real estate company? <s>Josh's real estate firm 
specializes in helping people find homes from [city][State].</s>
<s>Josh's real estate company is a boutique real estate firm serving clients 
locally.</s> In [city][state] I am sure you know how difficult it is
to find a great home, but we work closely with you to give you exactly 
what you need
STR;

print_r(preg_split(':</?s>:is', $string));

And got this output:

Array
(
    [0] => Are you looking for a quality real estate company? 
    [1] => Josh's real estate firm 
specializes in helping people find homes from [city][State].
    [2] => 

    [3] => Josh's real estate company is a boutique real estate firm serving clients 
locally.
    [4] =>  In [city][state] I am sure you know how difficult it is
to find a great home, but we work closely with you to give you exactly 
what you need
)

Except that produces an extra array element (index 2) where there's a newline between the fragments [city][State].</s> and <s>Josh's real estate company.

It'd be trivial to add some code to remove the whitespace matches though, but I'm not sure if you desire that.

like image 58
BoltClock Avatar answered Aug 09 '26 05:08

BoltClock



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!