正则表达式-查找字符串中的8位数字

时间:2018-08-27 05:39:07

标签: php regex preg-match

我想使用正则表达式从字符串中提取8位数字。

测试字符串是

  

import { FileUploadModule } from "angular-file-uploader"; @NgModule({ imports: [ ..., FileUploadModule, ... ] }) hi 82799162236232 (82342450)

所需的相应输出应为

  

test data 89798279916282342450

我尝试了以下代码:

  • null
  • preg_match('/[0-9]{8}$/', $string, $match);

但是它不会从preg_match('/\d{8}$/', $string, $match);中检索数字。

2 个答案:

答案 0 :(得分:3)

如果正则表达式要精确捕获 8位数字,则必须包含:

  • \d{8}作为中心部分,
  • “之前”条件,请确保在您的比赛之前之前没有数字出现,
  • “之后”条件,请确保您的比赛之后没有数字出现。

一种可能的解决方案是使用负向后搜索 / 前瞻

(?<!\d)\d{8}(?!\d)

另一个选择是单词边界断言(两端):

\b\d{8}\b

我认为,像[0-9]{8}这样的正则表达式还不够,因为它还捕获了 更长序列中的前8位数字。 您对此感到满意吗?

答案 1 :(得分:2)

问题出在您的$号上,它用来表示表达式的结尾。因此,基本上,使用该表达式,您正在寻找一个以8位数字结尾的字符串。但是在第二个测试字符串中; '236232 (82342450)'以方括号结尾,因此不符合条件(不以数字结尾)。

因此,删除结尾的$,它将起作用。

preg_match('/[0-9]{8}/',$string,$match);

希望有帮助!