我正在开发一个使用抓取来收集数据的网络应用。我遇到了一个障碍,因为我不确定如何编写正则表达式来提取我需要的数据。
我需要从以下字符串中提取距离和等级。
"The Bet with the Tote 525 (A6) 525y"
等级为“A6”,距离为“525y”。
每隔一段时间,字符串中都有另一组括号,需要排除。例如,在这个字符串中:
"The Bet with the Tote (Starter race) Some more info (A6) 525y"
我需要第二组括号。等级和距离始终附加到描述的末尾,因此始终位于字符串的末尾。
我尝试过简单地使用substr()来获取字符串末尾的字符数,但是不时地将距离设置为类似“525yH”的东西,它完全抛出它。出于这个原因,我猜想正则表达式将是最好的选择。
非常感谢任何帮助。
丹
扩展信息
答案 0 :(得分:1)
感谢更新问题,这很简单:
preg_match('/(\(\w+\)) (\w+)H?/', $str, $matches);
用法:
$str = "The Bet with the Tote 525 (A6) 525y";
print_r($matches);
输出:
Array
(
[0] => (A6) 525y
[1] => (A6)
[2] => 525y
)
或:
$str = "The Bet with the Tote (Starter race) Some more info (A6) 525y";
print_r($matches);
输出:
Array
(
[0] => (A6) 525y
[1] => (A6)
[2] => 525y
)
虽然我个人更喜欢爆炸方法的优雅,但它需要额外的条件和可能的操作来移除尾随的H.
答案 1 :(得分:1)
你可以尝试:
([^)]+) (\d+y.?)$
更具体一点
答案 2 :(得分:1)
如果数据模式是固定的,为什么不使用EXPLODE?
<?php
$str = "The Bet with the Tote 525 (A6) 525y";
$strArr = explode(" ",$str);
$arrCount = count($strArr);
$data1 = $strArr[$arrCount - 1];
$data2 = $strArr[$arrCount - 2];
echo $data1," , ",$data2;
?>
答案 3 :(得分:1)
自
等级和距离始终 附在说明书的末尾 总是在最后 字符串。
如下所示,没有正则表达式,可能会有效。也就是说,假设您的上述陈述是正确的。
$text = "The Bet with the Tote (Starter race) Some more info (A6) 525y";
array_slice(explode(" ", $text), -2, 2);
//returns
Array
(
[0] => (A6)
[1] => 525y
)
答案 4 :(得分:1)
$str = 'The Bet with the Tote 525 (A6) 525y';
preg_match_all('/.*\((?P<grade>.+?)\)\s(?P<distance>.+?)$/', $str, $matches);
var_dump($matches);
array(5) {
[0]=>
array(1) {
[0]=>
string(9) "(A6) 525y"
}
["grade"]=>
array(1) {
[0]=>
string(2) "A6"
}
[1]=>
array(1) {
[0]=>
string(2) "A6"
}
["distance"]=>
array(1) {
[0]=>
string(4) "525y"
}
[2]=>
array(1) {
[0]=>
string(4) "525y"
}
}
因此,您可以访问$matches['grade']
和$matches['distance']
来访问成绩和距离。
你的第二个字符串......
Bet with the Tote(入门种族)更多信息(A6)525y
array(5) {
[0]=>
array(1) {
[0]=>
string(61) "The Bet with the Tote (Starter race) Some more info (A6) 525y"
}
["grade"]=>
array(1) {
[0]=>
string(2) "A6"
}
[1]=>
array(1) {
[0]=>
string(2) "A6"
}
["distance"]=>
array(1) {
[0]=>
string(4) "525y"
}
[2]=>
array(1) {
[0]=>
string(4) "525y"
}
}
答案 5 :(得分:0)
尝试:
/.*?\((.*?)\)\W+(.*)$/