我想在两个其他字符串之间提取一个字符串。字符串碰巧在HTML标签内,但我想避免谈论我是否应该用正则表达式解析HTML(我知道我不应该用stristr()解决问题,但想知道怎么做用正则表达式。
字符串可能如下所示:
...uld select “Apply” below.<br/><br/><b>Primary Location</b>: United States-Washington-Seattle<br/><b>Travel</b>: Yes, 75 % of the Time <br/><b>Job Type</b>: Standard<br/><b>Region</b>: US Service Lines: ASL - Business Intelligence<br/><b>Job</b>: Business Intelligence<br/><b>Capability Group</b>: Con/Sol - BI&C<br/><br/>LOC:USA
我对<b>Primary Location</b>: United States-Washington-Seattle<br/>
感兴趣并希望提取“美国 - 华盛顿 - 西雅图”
我尝试'(?<=<b>Primary Location</b>:)(.*?)(?=<br/>)'
在RegExr中工作但不在PHP中工作:
preg_match("/(?<=<b>Primary Location</b>:)(.*?)(?=<br/>)/", $description,$matches);
答案 0 :(得分:1)
您使用/
作为正则表达式分隔符,因此如果要按字面意思匹配或使用其他分隔符,则需要将其转义
preg_match("/(?<=<b>Primary Location</b>:)(.*?)(?=<br/>)/", $description,$matches);
到
preg_match("/(?<=<b>Primary Location<\/b>:)(.*?)(?=<br\/>)/", $description,$matches);
或者
preg_match("~(?<=<b>Primary Location</b>:)(.*?)(?=<br/>)~", $description,$matches);
<强>更新强>
我刚刚在www.writecodeonline.com/php和
上测试过它$description = "uld select “Apply” below.<br/><br/><b>Primary Location</b>: United States-Washington-Seattle<br/><b>Travel</b>: Yes, 75 % of the Time <br/><b>Job Type</b>: Standard<br/><b>Region</b>: US Service Lines: ASL - Business Intelligence<br/><b>Job</b>: Business Intelligence<br/><b>Capability Group</b>: Con/Sol - BI&C<br/><br/>LOC:USA";
preg_match("~(?<=<b>Primary Location</b>:)(.*?)(?=<br/>)~", $description, $matches);
print_r($matches);
正在运作。输出:
数组([0] =&gt;美国 - 华盛顿 - 西雅图[1] =&gt;美国 - 华盛顿 - 西雅图)
您也可以摆脱捕获组并执行
$description = "uld select “Apply” below.<br/><br/><b>Primary Location</b>: United States-Washington-Seattle<br/><b>Travel</b>: Yes, 75 % of the Time <br/><b>Job Type</b>: Standard<br/><b>Region</b>: US Service Lines: ASL - Business Intelligence<br/><b>Job</b>: Business Intelligence<br/><b>Capability Group</b>: Con/Sol - BI&C<br/><br/>LOC:USA";
preg_match("~(?<=<b>Primary Location</b>:).*?(?=<br/>)~", $description, $matches);
print($matches[0]);
输出
美国 - 华盛顿 - 西雅图