How to distinguish <div>
from <?php ?>
using php regex ?
div
is just an example. I need in <smth> <?php code ?> </smth>
distinguish between smth
and ?php code ?
, where smth and code may be any characters combination.
I would like to get content of <div>
, but not of <?php ? >
, and sometimes vise versus
$regex1 = '#<(?<!\?)(.*?)>#' ; // result : div , ?php ? , /div .
I do not need php in this case.
$regex1 = '#<(?<!\??)(.*?)>#' ; //Compilation failed: lookbehind assertion is not fixed length at offset 8
The second question would be how to retrieve inside <?php ?>
inside <div>
and similar html markup
$htmlStr = " before <div> inside <?php ?> </div> after ";
$regex1 = '#(.*)' //before
. '<(?!\?)' // < not followed by ?
. '(.*)' // div
. '((?<!\?)>)'// > not preceeded by ?
. '(.*)' // Retrieves only 'inside', instead of 'inside <?php ? >'
. '</' // </
. '.*' // div
. '((?<!\?)>)' // > not preceeeded by ?
. '(.*)#'; // after
I also have tried non-greedy expression :
$regex1 = '#(.*)' //before
. '<(?!\?)' // < not followed by ?
. '(.*)' // div
. '((?<!\?)>)'// > not preceeded by ?
. '(.*?)' // // non-greedy expression fetch only 'inside', but i need 'inside <?php ? >'
. '</' // </
. '.*' // div
. '((?<!\?)>)' // > not preceeeded by ?
. '(.*)#'; // after
Final adjustment. DOM also does not rerieve value if it contains . The code below lineforeach ($els as $el) { echo '<br><br>element value ='. $el->nodeValue; }
echoes inside
instead of inside <?php ?>
$htmlStr = " before <div> inside <?php ?> </div> after ";
$regex1 = '#(.*)<([a-zA-Z]+)>'// > not preceeded by ? [a-zA-Z]
. '(.*)' // greedy expression fetch only 'inside', but i need 'inside <?php ? >' (?=<\/)'
. '</' // </
. '[a-zA-Z]+' // div
. '(?<!\?)>' // > not preceeeded by ?
. '(.*)#'; // after */
preg_match_all($regex1, $htmlStr, $attrArr1, 0); //input
$attrArr1 = array_filter($attrArr1);
print_r('<br><br> 619 htmlStr=' . $htmlStr. ', attrArr1 = <pre>'); print_r($attrArr1);
$dom = new \DOMDocument('1.0'); // name, value
$dom->loadHTML($htmlStr);
$ansArr['elType'] = $attrArr1[2][0];
//$els = $dom->getElementsByTagName('*'); // To be done
$els = $dom->getElementsByTagName($ansArr['elType'] );
foreach ($els as $el) { echo '<br><br>element value ='. $el->nodeValue; } //gives value 'inside'
print_r('<br><br>620 elType='.$ansArr['elType'].', els='); print_r($els);