Php preg_替换正则表达式,将字符串拆分为数组
我有一个字符串,我需要将一些值拆分成一个数组,最好的方法是什么 字符串可以如下所示:Php preg_替换正则表达式,将字符串拆分为数组,php,regex,Php,Regex,我有一个字符串,我需要将一些值拆分成一个数组,最好的方法是什么 字符串可以如下所示: <span class="17">118</span><span style="display: inline">.</span><span style="display:none"></span> 118。 或 12525354 这些规则是: 字符串可以以数字开头,后跟span或div 字符串可以以span或div开头 字符串可以以
<span class="17">118</span><span style="display: inline">.</span><span style="display:none"></span>
118。
或
12525354
这些规则是:
0 => 123
1 => <span class="potato">123</span>
2 => <span style="color: black">123</span>
0=>123
1 => 123
2 => 123
我试过一些Costam regex,但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
$pattern=“/(.*?)如果您只需将此字符串加载到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)...]
var el=document.createElement('div');
el.innerHTML='12525354';
//测试您的第一个元素(125)索引=0(您可以创建循环)
如果(el.childNodes[0].nodeType==3)发出警报(“这是第一个数字,请验证它”);
else if(el.childNodes[0].nodeType==1)警报('这是span或div,测试它');
//您可以使用el.childNodes[0].nodeName测试div或span
//将第一个元素存储到数组中
//然后继续,测试el.childNodes[下一个,索引=1(span)…]
//然后继续,测试el.childNodes[下一个,索引=2(354)…]
既然你已经知道你在寻找什么,这可以简单到试试/(]*>)*([^只是一个想法,为什么你不把它解析为html?那么你就可以使用元素[],比如文本节点、元素节点等等……你指的是什么库或函数?我在回答部分为你做了一个例子:(对不起,我没有意识到你需要php。那么同样的,我想你需要一个php HTML DOM解析器,应该不会太难。这个解析器像javascript一样工作,有子节点等等。。。
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)...]
$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]);
?>