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

时间:2014-07-27 10:43:34

标签: php regex

在学习之后我总是忘记正则表达式。我想从字符串中提取isbn数字。

字符串:English | ISBN: 1285463234 | 2014 | 499 pages | PDF | 28 MB

目标提取:1285463234

4 个答案:

答案 0 :(得分:3)

您可以在此正则表达式中使用findall

/(?<=ISBN: )\d+/

Regex Demo

<强>解释

  • (?<=打开一个积极的前瞻组,声明这匹配在:
  • 之后
  • ISBN:匹配字符串“ISBN:”
  • )关闭了前瞻小组。
  • \d+匹配一个或多个数字。

答案 1 :(得分:2)

您可以尝试以下正则表达式来提取ISBN号

ISBN:\s*\K\d+

DEMO

您的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)

准确的表示(以及其他答案的拼凑^^)将是这样的:

(?<=\| ISBN: )(\S+)(?= \|)

Regular expression visualization

Debuggex Demo