PHP 用于查找特定子字符串的正则表达式

PHP Regex to find a specific substring

所以基本上,我有一个带有一些其他信息的大字符串,在最后的某个地方,我有以下字符串结构:

62AC979D-5277D720

是数字和大写字母。我想从更大的字符串的许多行中提取这个子字符串,这些字符串都在不同的地方包含它。我试过:

preg_match('/^[\w]+$/', $string);

但我对正则表达式的经验确实不多。有人可以提供必要的正则表达式或至少告诉我哪里错了吗?感谢您的宝贵时间!

preg_match_all('/\b[0-9A-Z]+-[0-9A-Z]+\b/')

这应该可以为您完成。

preg_match('/\b[0-9A-Z]{8}-[0-9A-Z]{8}\b/', $string);

这适用于您提供的字符串,即 8 个数字或字母后跟 -,然后是数字和字母

你试试这个。

 preg_match('/^[0-9A-Z]{8}-[0-9A-Z]{8}$/', $string)

这个正则表达式应该为你做,

([A-Z\d]{8}-[A-Z\d]{8})

正在使用

<?php
$string = 'This is 62AC979D-5277D720 the whole string.';
preg_match_all('~([A-Z\d]{8}-[A-Z\d]{8})~', $string, $value);
print_r($value[1]);

我怀疑您当前的正则表达式失败是因为 ^$。这些标记您正在搜索的字符串的开始和结束(如果使用 m 修饰符,则标记行)。 \w 也是 a-zA-Z0-9_。我认为您只关心大写字母并且只想允许一个破折号。如果目标也始终只有 8 个字符,您可以添加 {8} 代替 +() 用于捕获找到的值。在 $string 中找到的第一个值将是 $value[1][0]

演示:http://sandbox.onlinephpfunctions.com/code/c6b2c391d95c5454a3c7ea81d5ac4a3bb8e49aef