真的很挣扎......希望有人能让我走上解决问题的正确道路。
我的输入字符串的结构如下:
66-2141-A-AC107-7
我有兴趣使用单个正则表达式提取字符串'AC107'。我知道如何使用其他PHP字符串函数执行此操作,但我必须使用正则表达式执行此操作。
我需要的是提取第三个和第四个连字符之间的所有数据。每个部分的结构不是固定的(即,66可以是8798709,2141可以是38)。保证连字符数量的存在(即总共有四(4)个连字符)。
非常感谢任何帮助/指导!
答案 0 :(得分:3)
这将满足您的需求:
(?:[^-]*-){3}([^-]+)
说明:
(?:[^-]*-)
查找零个或多个非连字符后跟连字符{3}
查找刚刚描述的三个块([^-]+)
从该点开始捕获所有连续的非连字符(将在下一个连字符前自动切断)您可以在PHP中使用它:
$str = '66-2141-A-AC107-7';
preg_match('/^(?:[^-]*-){3}([^-]+)/', $str, $matches);
echo $matches[1]; // prints AC107
答案 1 :(得分:0)
这应该查找任何后跟连字符3次然后在第2组(第二组括号)中的任何内容,它将具有您的值,然后是另一个连字符和其他任何内容。
/^(.*-){3}(.*)-(.*)/
您可以使用$ 2访问它。在php中,它会是这样的:
$string = '66-2141-A-AC107-7';
preg_match('/^(.*-){3}(.*)-(.*)/', $string, $matches);
$special_id = $matches[2];
print $special_id;