我希望根据入口号码从此文本中获取部分ID 周期。
<li id="section-1" role="example" label="1 - 6">
<li id="section-2" role="example" label="6 - 12">
<li id="section-3" role="example" label="12 - 18">
<li id="section-4" role="example" label="18 - 24">
例如,当我输入 8 期间 6 - 12 时,我会得到&#34; 第2部分&#34 ; , 21 将获得&#34; 第4节&#34;等...
答案 0 :(得分:3)
您可以尝试这样的事情:
<?php
$text = '<li id="section-1" role="example" label="1 - 6">
<li id="section-2" role="example" label="6 - 12">
<li id="section-3" role="example" label="12 - 18">
<li id="section-4" role="example" label="18 - 24">';
$pattern = '<li id="section-([0-9]+)" role="example" label="([0-9]+) - ([0-9]+)">';
function find_section($value) {
global $text, $pattern;
preg_match_all($pattern, $text, $results);
$index = 0;
foreach($results[3] as $max) {
if ($value < $max) {
break;
}
$index++;
}
return "section-{$results[1][$index]} {$results[2][$index]} - {$results[3][$index]}\n";
}
echo find_section(6); // section-2 6 - 12
echo find_section(21); // section-4 18 - 24
答案 1 :(得分:1)
假设你知道自己在做什么,我会选择这样的功能:
function find_section($html, $value)
{
static $pattern = '/<li id="section\\-(\\d+)" role="example" label="(\\d+) \- (\\d+)"(>)/';
$offset = 0;
while (preg_match($pattern, $html, $matches, PREG_OFFSET_CAPTURE, $offset))
{
$section_id = (int) $matches[1][0];
$range_min = (int) $matches[2][0];
$range_max = (int) $matches[3][0];
$offset = $matches[4][1] + 1;
if ($value >= $range_min && $value < $range_max)
{ return 'section-' . $section_id; }
}
return null;
}
我个人不知道单一preg_match
电话的可能性。我说这是不可能的。上面的函数将扫描给定的li
- HTML元素的HTML字符串。模式,提取它们的范围并将给定值与它进行比较。
取决于您实际想要达到的目标,例如如果你正在搜索多个值的节,你可能想要先扫描所有li
- 元素并将它们存储为更容易访问的数据(例如数组或stdclass对象),所以你赢了# 39;每次搜索值的部分时都必须重新匹配整个HTML代码。
上述函数的一个简单的小测试代码(只是为了展示它是如何工作的)将是:
$html = '
<li id="section-1" role="example" label="1 - 6">
<li id="section-2" role="example" label="6 - 12">
<li id="section-3" role="example" label="12 - 18">
<li id="section-4" role="example" label="18 - 24">
';
echo find_section($html, 8) . "\n";
echo find_section($html, 21) . "\n";
echo find_section($html, 50) . "\n";
输出:
section-2
section-4
(使用PHP 5.5.15测试)