Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式-在字符串中查找8位数字_Php_Regex_Preg Match - Fatal编程技术网

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

Php 正则表达式-在字符串中查找8位数字,php,regex,preg-match,Php,Regex,Preg Match,我想使用正则表达式从字符串中提取8位数字 测试字符串是 hi 82799162,236232(82342450),测试数据8979 所需的相应输出应为 82799162,82342450,null 我尝试了以下代码: preg_match('/[0-9]{8}$/',$string,$match) preg_match('/\d{8}$/',$string,$match) 但它不会从236232(82342450)中检索数字问题在于$符号,它用于指示表达式的结尾。基本上,用这个表达式,你要寻

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

测试字符串是

hi 82799162
236232(82342450)
测试数据8979

所需的相应输出应为

82799162
82342450
null

我尝试了以下代码:

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

但它不会从
236232(82342450)

中检索数字问题在于
$
符号,它用于指示表达式的结尾。基本上,用这个表达式,你要寻找一个以8位数字结尾的字符串。但是在第二个测试字符串中<代码>'236232(82342450)
,以括号结尾,因此不符合标准(不以数字结尾)

因此,删除尾随的
$
,它就会工作

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

希望能有帮助

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

  • \d{8}
    作为一个中心部分
  • “before”条件,确保在您的比赛之前没有数字出现
  • “之后”条件,确保在比赛后没有数字出现
一种可能的解决方案是使用消极的后看/前看:

我认为,像regex一样的
[0-9]{8}
是不够的,因为它还捕获了 较长的数字序列的前8位。
您对此满意吗?

删除尾随的
$
。谢谢,它成功了。我是regex noob。预期结果是什么:
123456789
?它应该被丢弃,因为它不完全是8位数长的。顺便说一句,我已经接受了尼梅斯卡的答案。那么你应该接受@Valdi_-Bo的答案。你能帮我吗?第二个选项非常有效,但我想搜索可能包含数字或字母的8位单词,然后以.php结尾,并且必须仅包含8个字符,既不包含7个字符,也不包含6个字符。如果不仅要匹配数字,还要匹配字母,请将
\d
更改为
[a-z\d]
。然后添加
\.php
。因此,整个正则表达式应该是
\b[a-z\d]{8}\.php\b
,带有
i
(不区分大小写)选项。我假设所提到的字符数与“.php”之前的部分有关。或者整个字符串应该包含8个字符?在这种情况下,正则表达式应该是
\b[a-z\d]{4}\.php\b
(4位数字或字母,然后是“.php”,总共8个字符)。
(?<!\d)\d{8}(?!\d)
\b\d{8}\b