Php 正则表达式,用于查找包含在两个条之间并包含特定单词的字符串
我总是一学regex就忘了。我想从字符串中提取isbn号 字符串:Php 正则表达式,用于查找包含在两个条之间并包含特定单词的字符串,php,regex,Php,Regex,我总是一学regex就忘了。我想从字符串中提取isbn号 字符串:English | ISBN:1285463234 | 2014 | 499页| PDF | 28MB 提取目标:1285463234您可以尝试使用下面的正则表达式提取ISBN号 ISBN:\s*\K\d+ 你的PHP代码是 <?php $mystring = 'English | ISBN: 1285463234 | 2014 | 499 pages | PDF | 28 MB'; $regex = '~ISBN:\s
English | ISBN:1285463234 | 2014 | 499页| PDF | 28MB
提取目标:
1285463234
您可以尝试使用下面的正则表达式提取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
/=>1285463234
说明:
匹配字符串ISBN:
ISBN:
匹配零个或多个空格\s*
丢弃以前匹配的字符。(即,\K
)ISBN:
匹配一个或多个数字\d+
findall
与此正则表达式一起使用:
/(?<=ISBN: )\d+/
/(?一个精确的表示(以及其他答案的拼凑)是:
(?<=\| ISBN: )(\S+)(?= \|)
(?如果您对regex有问题,还有其他库可以用您的简单示例来解决,例如:
如果存在匹配($result
为1),$isbn
变量将包含整数形式的isbn号:
ISBN数字从不以0开头,因此这不会造成任何问题。如果需要is作为字符串,请使用%s
而不是%d
:
$result = sscanf($subject, 'English | ISBN: %s | ', $isbn);
结果是一个字符串:
string(10) "1285463234"
Scanf模式比PCRE正则表达式(功能更强但也更复杂)更容易处理不太复杂的字符串解析。此外,对特定变量的赋值也更容易
$result = sscanf($subject, 'English | ISBN: %s | ', $isbn);
string(10) "1285463234"