正则表达式 - 在字符串中查找 8 位数字
Regex - Find 8 digit number in string
我想使用正则表达式从字符串中提取 8 位数字。
测试字符串是
hi 82799162
, 236232 (82342450)
, test data 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" 条件,确保 在 你的匹配之前没有数字出现,
- 一个 "after" 条件,确保没有数字出现 在 你的匹配之后。
一种可能的解决方案是使用负向后视 / 前视:
(?<!\d)\d{8}(?!\d)
另一种选择是词边界断言(在两端):
\b\d{8}\b
我认为,像 [0-9]{8}
这样的正则表达式是不够的,因为它还捕获
前 8 位数字 来自 更长的 数字序列。
你满意吗?
我想使用正则表达式从字符串中提取 8 位数字。
测试字符串是
hi 82799162
,236232 (82342450)
,test data 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" 条件,确保 在 你的匹配之前没有数字出现,
- 一个 "after" 条件,确保没有数字出现 在 你的匹配之后。
一种可能的解决方案是使用负向后视 / 前视:
(?<!\d)\d{8}(?!\d)
另一种选择是词边界断言(在两端):
\b\d{8}\b
我认为,像 [0-9]{8}
这样的正则表达式是不够的,因为它还捕获
前 8 位数字 来自 更长的 数字序列。
你满意吗?