如何在两个其他已知字符串之间匹配一个字符串而不与REGEX匹配?

时间:2012-04-19 11:47:39

标签: php regex

我想在两个其他字符串之间提取一个字符串。字符串碰巧在HTML标签内,但我想避免谈论我是否应该用正则表达式解析HTML(我知道我不应该用stristr()解决问题,但想知道怎么做用正则表达式。

字符串可能如下所示:

...uld select &#8220;Apply&#8221; 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);

1 个答案:

答案 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]);

输出

  

美国 - 华盛顿 - 西雅图