我想学习如何使用一组与preg_split
函数完全相同的PHP代码,而不使用实际的preg_split
函数。以此为例
<?php
$string = '<p>i am a sentence <span id="blah"> im content inside of the span </span> im another sentence <span id="anId">i m another span content</span> im the last sentence in this p tag <span id="last">im the third span tag in this p tag<span></p>';
if ( preg_match_all("/<span[^>]*>/", $string, $temporaryArray) ) {
foreach ($temporaryArray as $values) {
$theArrayWithoutUsingPregSplit[$strpos] = $values;
}
}
?>
这不起作用,因为preg_match_all
只计算匹配的次数而不获取实际的字符串。但是此页http://php.net/manual/en/function.preg-split.php#118326上的人能够做到这一点。有人可以帮忙吗。
另外我想让strpos()
函数用作每个数组元素的键,这样我就能看到$string
变量中值的位置,在我给出的例子中变量没有价值。
我试图从字符串变量中获取的结束输出是
array (
[$thisVariableIsANumberWhichIsTheStrPosOfTheValue] i am a sentence
[$thisVariableIsANumberWhichIsTheStrPosOfTheValue] im content inside of the span
[$thisVariableIsANumberWhichIsTheStrPosOfTheValue] im another sentence
[$thisVariableIsANumberWhichIsTheStrPosOfTheValue] i m another span content
[$thisVariableIsANumberWhichIsTheStrPosOfTheValue] im the last sentence in this p tag
[$thisVariableIsANumberWhichIsTheStrPosOfTheValue] im the third span tag in this p tag
)
我不认为preg_split
是在这种情况下使用的最好的原因是因为我不能使用表示值strpos
的数组键。
对于这么多的写作感到抱歉,我试着让问题变得可以理解,因为我可以做到这一点,或者人们可能会投票,如果你有任何问题可以自由提问。
答案 0 :(得分:0)
使用DOMDocument:
$string = '<p>i am a sentence <span id="blah"> im content inside of the span </span> im another sentence <span id="anId">i m another span content</span> im the last sentence in this p tag <span id="last">im the third span tag in this p tag<span></p>';
$dom = new DOMDocument;
$dom->loadHTML($string, LIBXML_HTML_NOIMPLIED);
$xp = new DOMXPath($dom);
foreach($xp->query('//text()') as $textNode) {
echo trim($textNode->nodeValue), PHP_EOL;
}
这种方法包括在每个文本节点之后使用XPath查询语言询问简单查询//text()
(DOM树中任何位置的文本节点)。
答案 1 :(得分:0)
要在<span>
和</span>
之间获取文字,您需要更改正则表达式以匹配它们,并在两者之间使用捕获组。
$temporaryArray
是一个二维数组; element 0
包含整个正则表达式的匹配项,元素N
包含第N个捕获组的匹配项。所以你想要的字符串在$temporaryArray[1]
。如果您还想要这些职位,请使用PREG_OFFSET_CAPTURE
选项。使用此选项,每个匹配都是一个数组[ "string", strpos ]
。
if ( preg_match_all('#<span[^>]*>(.*?)</span>#', $string, $temporaryArray, PREG_OFFSET_CAPTURE) ) {
$theArrayWithoutUsingPregSplit = array();
foreach($temporaryArray[1] as $match) {
$theArrayWithoutUsingPregSplit[$match[1]] = $match[0];
}
}
答案 2 :(得分:0)
我很抱歉我可能给你造成的麻烦,我想在没有preg_split()函数的情况下这样做的原因是因为我认为preg_split()无法返回它返回的字符串的strpos但是这一次它就是这样的
$Array = preg_split('/<[^>]*>/', $string, 0, PREG_SPLIT_OFFSET_CAPTURE);
得到我想要的东西。我只是想能够使用strpos以及字符串中的字符串。我喜欢这个网站有这样一个有用的社区,我感谢大家的帮助,我非常感激。