Php 正则表达式,用于查找包含在两个条之间并包含特定单词的字符串

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

我总是一学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*\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"