我有一个字符串,我需要将一些值拆分成一个数组,最好的方法是什么?
字符串可以如下所示:
<span class="17">118</span><span style="display: inline">.</span><span style="display:none"></span>
或
125<span class="17">25</span>354
规则是:
我需要的是分离字符串,以便我将元素分开,例如:
0 => 123
1 => <span class="potato">123</span>
2 => <span style="color: black">123</span>
我尝试了一些costum regex,但正则表达式并不是我强大的一面:
$pattern = "/<div.(.*?)<\/div>|<span.(.*?)<\/span>/";
// i know it wont detect a number value prior to the div, thats also an issue, even if it worked
我不能使用simple_html_dom来完成REGEX。
在每个&gt;&lt;之间拆分字符串可能会有效,但“&gt;(。*?)&lt;” &lt;&lt;出于某种原因?
答案 0 :(得分:0)
如果你只是将这个字符串加载到DOM然后手动解析它编程你的逻辑,你可能会获得更好的性能:
var el = document.createElement( 'div' );
el.innerHTML = '125<span class="17">25</span>354';
// test your first element (125) index=0 (you can make for loop)
if(el.childNodes[0].nodeType == 3) alert('this is number first, validate it');
else if(el.childNodes[0].nodeType == 1) alert('this is span or div, test it');
// you can test for div or span with el.childNodes[0].nodeName
// store first element to your array
// then continue, test el.childNodes[next one, index=1 (span)...]
// then continue, test el.childNodes[next one, index=2 (354)...]
因为你已经知道你在寻找,这可以就是那么简单
答案 1 :(得分:0)
尝试/(<(span|div)[^>]*>)*([^<]*)(<\/(span|div)>)*/
正则表达式中说'可能有一个跨度或div或者什么都没有,然后它必须是/ span或/ div或者什么都没有,并且整个语句可以匹配零次或多次。
这是一个例子:
$pattern = "/(<(span|div)[^>]*>)*([^<]*)(<\/(span|div)>)*/";
$txt = '<span class="17">118</span><span style="display: inline">.</span><span style="display:none"></span>';
preg_match_all($pattern, $txt,$foo);
print_r($foo[0]);
$txt = '125<span class="17">25</span>354';
preg_match_all($pattern, $txt,$foo);
print_r($foo[0]);
?>