Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php preg_替换正则表达式,将字符串拆分为数组_Php_Regex - Fatal编程技术网

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
这些规则是:

  • 字符串可以以数字开头,后跟span或div
  • 字符串可以以span或div开头
  • 字符串可以以数字结尾
  • 字符串可以以/span或/div结尾
  • div/span可以有一个样式/类
  • 我需要的是分离字符串,以便将元素分离,例如:

    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]);
    ?>