从长串中抓取一些字符串

时间:2016-09-21 20:33:08

标签: javascript php string

我在一个包含

的文本文件中有一个HTML示例
<div class="container">
  <div class="row" >
      <div class="col-lg-4" id="code-01"></div>
      <div class="col-lg-4" id="code-02"></div>
      <div class="col-lg-4" id="code-03"></div>
  </div>
</div>

我想从中抓取一些字符串 - 匹配

的任何内容

id="code-**"

如果我做得对,它应该打印出来。 它应该找到它3次

  • ID =&#34;代码-01&#34;
  • ID =&#34;代码-02&#34;
  • ID =&#34;代码-03&#34;

我已经尝试了

我已将其视为测试字符串。

PHP

$string = '<div class="container"> <div class="row" > <div class="col-lg-4" id="code-01"></div> <div class="col-lg-4" id="code-02"></div> <div class="col-lg-4" id="code-03"></div> </div> </div>';


// dd(preg_match('/id="code-[0-9]"/', $string)); // I got 0
// dd(preg_match('/id="code-"/', $string)); // I got 0
// dd(preg_match('/id=/', $string)); // I got 1, why 1, there're 3 of them

JS

var string = '<div class="container"> <div class="row" > <div class="col-lg-4" id="code-01"></div> <div class="col-lg-4" id="code-02"></div> <div class="col-lg-4" id="code-03"></div> </div> </div>';

string.match(/id="code-\[(\d+)\]\[(\d+)\]/);

有人可以在这里给一点提示吗?

4 个答案:

答案 0 :(得分:3)

使用jQuery会更容易:

$("div#[id^='code-']").each(function () {

    console.log('id=' + $(this).attr("id"));

});

答案 1 :(得分:2)

您的PHP示例仅返回0或1的原因是preg_match只检查字符串是否匹配一次。请尝试preg_match_all,因为它会继续并找到您要查找的所有匹配项。要检索匹配的值,请传入可选的$matches参数,然后查看该数组的内容以查找结果。

答案 2 :(得分:2)

我已为以下/id=["']code-[0-9]+/gi更改了您的正则表达式。现在它的工作。

PHP

$string = '<div class="container"> <div class="row" > <div class="col-lg-4" id="code-01"></div> <div class="col-lg-4" id="code-02"></div> <div class="col-lg-4" id="code-03"></div> </div> </div>';

preg_match('/id=["\']code-[0-9]+["\']/gi', $string));

JS

var string = '<div class="container"> <div class="row" > <div class="col-lg-4" id="code-01"></div> <div class="col-lg-4" id="code-02"></div> <div class="col-lg-4" id="code-03"></div> </div> </div>';

string.match(/id=["']code-[0-9]+["']/gi);

答案 3 :(得分:1)

您可以使用strpos()或preg_match_all()在PHP中执行此操作:

$pos = 0;
$token = "code-";
$pattern = '/id="code-\d+"/';
$string = '<div class="container"> <div class="row" > <div class="col-lg-4" id="code-01"></div> <div class="col-lg-4" id="code-02"></div> <div class="col-lg-4" id="code-03"></div> </div> </div>';
$pos = strpos ( $string, $token);
while ( $pos !== false ) {
    echo substr ( $string, $pos, 7 ) . "->$pos<br>";
    $pos = strpos ( $string, $token, $pos+1 );
}
preg_match_all($pattern, $string, $matches, PREG_SET_ORDER);
var_dump($matches);

使用strpos()的灵活性较低,因为它需要代码 - ??,因此需要额外的检查。