如何捕获括号内的文本

发布于 2024-12-18 02:31:37 字数 434 浏览 1 评论 0原文

我有这个小代码来捕获括号之间的文本:

$string = '[title=my title] http://bit.ly/gANFxi [maps:some cool place]';    
preg_match_all('/\[([^\]]*)\]/', $string, $matches);
print_($matches[0]);

我得到的是以下内容:

    Array(
      [0] => [title=my title]
      [1] => [maps:some cool place]
    )

我想做出更多限制以避免“[some-not Cool]”或“[another+stuff]”, 所以我只需要捕获 [some:thing] 和 [some=thing]。

我该怎么做呢?

I have this little code to capture text between brackets:

$string = '[title=my title] http://bit.ly/gANFxi [maps:some cool place]';    
preg_match_all('/\[([^\]]*)\]/', $string, $matches);
print_($matches[0]);

What I get is the following:

    Array(
      [0] => [title=my title]
      [1] => [maps:some cool place]
    )

I want to make more restrictive to avoid "[some-not cool]" or "[another+stuff]",
so I need to catch only [some:thing] and [some=thing].

How can I do it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

兔姬 2024-12-25 02:31:37

这将捕获包含“=”或“:”的所有内容并忽略其他内容:

$string = '[title=my title] http://bit.ly/gANFxi [maps:some cool place] [some-not cool] or [another+stuff]';
preg_match_all('/\\[([^\\]]*[\\=|\\:][^\\]]*)\\]/', $string, $matches);
print_r($matches[0]);

这可以解决问题吗?或者还有其他要求吗?也就是说,这会返回“[some stuff=some:thing]”,但是应该吗? (注意多个单词以及“=”和“:”)。

This will catch everything that contains a '=' or ':' and ignore others:

$string = '[title=my title] http://bit.ly/gANFxi [maps:some cool place] [some-not cool] or [another+stuff]';
preg_match_all('/\\[([^\\]]*[\\=|\\:][^\\]]*)\\]/', $string, $matches);
print_r($matches[0]);

Does this do the trick? Or are there further requirements? That is, this return "[some stuff=some:thing]" but should it? (note both the multiple words and both '=' and ':').

孤独患者 2024-12-25 02:31:37

如果冒号或等号之前的部分仅由字母组成,则可以使用以下代码:

preg_match_all('/\[([a-z]+[:=][^\]]+)\]/i', $string, $matches);

如果第一部分更类似于 PHP 标识符($ 除外),则您可以使用以下代码:

preg_match_all('/\[([a-z_]+[a-z0-9_]+[:=][^\]]+)\]/i', $string, $matches);

If the part before the colons or the equal should be made only of letters, you can use the following code:

preg_match_all('/\[([a-z]+[:=][^\]]+)\]/i', $string, $matches);

If the first part is something more similar to a PHP identifier (except for the $), then you can use the following code:

preg_match_all('/\[([a-z_]+[a-z0-9_]+[:=][^\]]+)\]/i', $string, $matches);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文