基本上,我有一个包含其他信息的大字符串,最后在某处,我有以下字符串结构:
62AC979D-5277D720
是数字和大写字母。我想从更大字符串的许多行中提取这个子字符串,这些字符串都包含在不同的地方。我试过了:
preg_match('/^[\w]+$/', $string);
但我对正则表达式的经验并不多。有人可以提供必要的正则表达式,或者至少告诉我哪里弄错了?谢谢你的时间!
答案 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-z
,A-Z
,0-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)