Php 正则表达式来提取子字符串
真的很挣扎…希望有人能让我找到正确的解决方法 我的输入字符串的结构如下:Php 正则表达式来提取子字符串,php,regex,parsing,Php,Regex,Parsing,真的很挣扎…希望有人能让我找到正确的解决方法 我的输入字符串的结构如下: $string = '66-2141-A-AC107-7'; preg_match('/^(.*-){3}(.*)-(.*)/', $string, $matches); $special_id = $matches[2]; print $special_id; $str = '66-2141-A-AC107-7'; preg_match('/^(?:[^-]*-){3}([^-]+)/', $str, $matches
$string = '66-2141-A-AC107-7';
preg_match('/^(.*-){3}(.*)-(.*)/', $string, $matches);
$special_id = $matches[2];
print $special_id;
$str = '66-2141-A-AC107-7';
preg_match('/^(?:[^-]*-){3}([^-]+)/', $str, $matches);
echo $matches[1]; // prints AC107
66-2141-A-AC107-7
我对使用单个正则表达式提取字符串“AC107”感兴趣。我知道如何使用其他PHP字符串函数实现这一点,但我必须使用正则表达式
我需要的是提取第三个和第四个连字符之间的所有数据。每个部分的结构不是固定的(即,66可能是8798709,2141可能是38)。保证有足够数量的连字符(即总有四(4)个连字符)
非常感谢您的帮助/指导 这应该查找任何后跟连字符3次的内容,然后在第2组(第二组括号)中,它将包含您的值,后跟另一个连字符和其他内容
/^(.*-){3}(.*)-(.*)/
您可以使用$2访问它。在php中,它是这样的:
$string = '66-2141-A-AC107-7';
preg_match('/^(.*-){3}(.*)-(.*)/', $string, $matches);
$special_id = $matches[2];
print $special_id;
$str = '66-2141-A-AC107-7';
preg_match('/^(?:[^-]*-){3}([^-]+)/', $str, $matches);
echo $matches[1]; // prints AC107
这将满足您的需要:
(?:[^-]*-){3}([^-]+)
说明:
查找零个或多个后跟连字符的非连字符(?:[^-]*-)
查找刚才描述的三个块{3}
从该点向前捕获所有连续的非连字符(将在下一个连字符之前自动切断)([^-]+)
$string = '66-2141-A-AC107-7';
preg_match('/^(.*-){3}(.*)-(.*)/', $string, $matches);
$special_id = $matches[2];
print $special_id;
$str = '66-2141-A-AC107-7';
preg_match('/^(?:[^-]*-){3}([^-]+)/', $str, $matches);
echo $matches[1]; // prints AC107
哇!Ed Cottrell…超越一切!清晰、简洁、解释力强。非常感谢你的帮助!请记住接受答案。:)对于下一个投票人(我假设他就是刚才评论并删除评论的同一个人):从技术上讲,你是对的,
^
对于给定的示例来说是不必要的。为了清楚起见,我编辑了我的答案。不知道为什么有人会否决这个正确而有效的答案+1点星的使用非常差(且不必要)。请注意:/^(.*)-{3}(.*)-(.*)/
在字符串中包含超过4个连字符时失败。请参阅:@Ed Cottrell的答案,了解制作此正则表达式的更好方法。如果你打算提供更多关于正则表达式相关问题的答案,你最好去阅读。谢谢你的链接,ridgerunner。我看看能不能买到那本书。我喜欢使用正则表达式,我一直在寻找提高这方面技能的方法-我保证你不会后悔的。MRE3是我读过的最有用的书。请注意,在我开始使用正则表达式之前,我已经专业编程了30多年(低级汇编、C、FORTRAN等)。一旦我发现了它们(并阅读了MRE3),就再也没有回头路了(我因为没能更快地学习它们而痛斥自己1000次)。现在没有他们我活不下去了!正则表达式现在是我的(文本处理/编辑)工具箱中最强大的(是的,也是最有趣的)工具。我所了解到的关于REGEX的一切都是零零碎碎的。我没有人教我这些东西,所以我花了很长时间才习惯使用它们。我的雇主有一个Safari在线帐户,所以我正在我们谈话时获取这本书。再次感谢。。。我期待着有一天成为一名REGEX大师-瑞克