我在一个包含
的文本文件中有一个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次
我已经尝试了
我已将其视为测试字符串。
$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
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+)\]/);
有人可以在这里给一点提示吗?
答案 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
更改了您的正则表达式。现在它的工作。
$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));
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()的灵活性较低,因为它需要代码 - ??,因此需要额外的检查。