在学习之后我总是忘记正则表达式。我想从字符串中提取isbn数字。
字符串:English | ISBN: 1285463234 | 2014 | 499 pages | PDF | 28 MB
目标提取:1285463234
答案 0 :(得分:3)
您可以在此正则表达式中使用findall
:
/(?<=ISBN: )\d+/
<强>解释强>
(?<=
打开一个积极的前瞻组,声明这匹配在:ISBN:
匹配字符串“ISBN:” )
关闭了前瞻小组。\d+
匹配一个或多个数字。答案 1 :(得分:2)
您可以尝试以下正则表达式来提取ISBN号
ISBN:\s*\K\d+
您的PHP代码将是,
<?php
$mystring = 'English | ISBN: 1285463234 | 2014 | 499 pages | PDF | 28 MB';
$regex = '~ISBN:\s*\K\d+~';
if (preg_match($regex, $mystring, $m)) {
$yourmatch = $m[0];
echo $yourmatch;
}
?> //=> 1285463234
<强>解释强>
ISBN:
匹配字符串ISBN:
\s*
匹配零个或多个空格。\K
丢弃之前匹配的字符。(即ISBN:
)\d+
匹配一个或多个数字。答案 2 :(得分:2)
如果你有正则表达式的问题,还有其他库可以用你的直接例子来做,例如sscanf
function in the PHP string library:
$subject = 'English | ISBN: 1285463234 | 2014 | 499 pages | PDF | 28 MB';
$result = sscanf($subject, 'English | ISBN: %d | ', $isbn);
如果匹配($result
为1),$isbn
变量将包含ISBN号整数:
int(1285463234)
ISBN编号永远不会以0开头,所以这不会造成任何问题。如果您需要字符串,请使用%s
代替%d
:
$result = sscanf($subject, 'English | ISBN: %s | ', $isbn);
结果是一个字符串:
string(10) "1285463234"
扫描模式比PCRE正则表达式(具有更多功能但也更复杂)更容易处理不太复杂的字符串解析。此外,对特定变量的分配也更容易。
答案 3 :(得分:1)