Jump to content

[SOLVED] regex not doing the job


dsaba

Recommended Posts

I am using this function which uses regex to grab patterns of anything in between two markers

The markers I'm using are left '<root>' and right '</root>'

 

is there a better way to do this kind of regex other than my current one, it usually works but for some reason maybe because of the large amount of data 5 MB, it doesn't work

 

 

<?php
function get_insideMarkers($left, $right, $raw, $returnPattern = 'no') {
$leftMarker = preg_quote($left, '/');
$rightMarker = preg_quote($right, '/');
$findBulk = preg_match_all('/'.$leftMarker.'(.*?)'.$rightMarker.'/', $raw, $array);
$resultArray = $array[1];
if ($returnPattern != 'no') {
	return $array[0];
} else {
	return $resultArray;
}
}


?>

Link to comment
https://forums.phpfreaks.com/topic/70523-solved-regex-not-doing-the-job/
Share on other sites

Not regex ~ but it does the job ;)

 

<?php

function textbetweenarray($s1,$s2,$s){
$myarray=array();
$s1=strtolower($s1);
$s2=strtolower($s2);
$L1=strlen($s1);
$L2=strlen($s2);
$scheck=strtolower($s);

do{
$pos1 = strpos($scheck,$s1);
if($pos1!==false){
$pos2 = strpos(substr($scheck,$pos1+$L1),$s2);
if($pos2!==false){
$myarray[]=substr($s,$pos1+$L1,$pos2);
$s=substr($s,$pos1+$L1+$pos2+$L2);
$scheck=strtolower($s);
}
}
} while (($pos1!==false)and($pos2!==false));
return $myarray;
}

$contents = file_get_contents("file.txt");

$root = textbetweenarray("<root>", "</root>", $contents);

// You now have an array, $root, containing all you need 

?>

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.