如何将大字符串中的子字符串与正则表达式匹配? [复制]

Posted

技术标签:

【中文标题】如何将大字符串中的子字符串与正则表达式匹配? [复制]【英文标题】:How can i match a substring in a big string with a regex? [duplicate] 【发布时间】:2014-07-22 22:51:48 【问题描述】:

我有一个带有端口的 IPv6 地址[2401:2401:2401:2401:2401:2401:2401:2401]:1234。我只想在 php 中获取 IPv6 地址。我正在尝试做:

$str = "[2401:2401:2401:2401:2401:2401:2401:2401]:1234";
preg_match("[]", $str, $matches);
echo $matches[1];

但这并没有让我得到正确的结果。 我希望matches[1] 只包含"2401:2401:2401:2401:2401:2401:2401:2401"

【问题讨论】:

仅供参考:将代码粘贴到问题中,不要使用 pastebin(除非代码方式太大而无法放入问题中,在这种情况下,复制一个 sn -p 进入问题)。 不知道为什么将此问题标记为重复,因为我的问题是要知道 PHP 中的答案而不是常规正则表达式。 一个正则表达式就是一个正则表达式。该问题的答案也应该在这里起作用。 【参考方案1】:

您使用的preg_match 不起作用。你需要这样的东西:

preg_match("/\[([0-9a-fA-F:]+)\]/", $str, $matches);

【讨论】:

我的 IPv6 也可以包含字母。 [0-9a-fA-F:]+ 十六进制 preg_match("/[.*]/", $str, $matches);我运行了这个并得到了matches[0] = [1:2:3:4:5:6],但我也想排除方括号。 试试我现在发布的代码,看看你会在$matches[1]得到什么 @AdiUlici:我想从结果中排除 [ ] 方括号。知道该怎么做吗?

以上是关于如何将大字符串中的子字符串与正则表达式匹配? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

将大字符串中的子字符串匹配到大量关键字的最佳方法是啥

正则表达式:如何匹配不以前缀列表开头的子字符串

如何修改一个正则表达式的匹配方式

如何替换 Javascript 中的正则表达式子字符串匹配?

正则表达式如何匹配+号?

java正则表达式如何获取字符串中所有匹配内容