PHP Regex查找特定的子字符串

时间:2015-06-19 12:38:40

标签: php regex substring

基本上,我有一个包含其他信息的大字符串,最后在某处,我有以下字符串结构:

62AC979D-5277D720

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

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

但我对正则表达式的经验并不多。有人可以提供必要的正则表达式,或者至少告诉我哪里弄错了?谢谢你的时间!

4 个答案:

答案 0 :(得分:1)

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

([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

答案 1 :(得分:0)

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

这应该为你做。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

你试试这个。

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