从长绳子上抓几根绳子

Grab pieces of string out of long strings

本文关键字:几根      更新时间:2023-09-26

我有一个例子,一个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 ="code-01"
  • id ="code-02"
  • id ="code-03"

我试过了

我把它当作一个字符串来测试。

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 h1> 能给点提示吗?

使用jQuery会容易得多:

$("div#[id^='code-']").each(function () {
    console.log('id=' + $(this).attr("id"));
});

我已经为以下/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 h1> div class="answers">

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

您可以在PHP中使用strpos()或preg_match_all():

$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()不太灵活,因为它期望代码-??,因此需要额外的检查。