如何使用单个正则表达式从同一个字符串中找到两个组?

How to find two groups from same string using single regex?

我正在尝试使用正则表达式并遇到以下问题。

说,我有一个字符串 I am batman

如何在一组中捕捉 bat 而在另一组中捕捉整个 batman

这个词可以是任何东西..

示例:

I am batman
I am superman
I am ironman

输出

bat and batman
sup and superman
iro and ironman

我试过 I am (\w{3}|\w*) 但它只捕获了一组(第 1 组)。

我的尝试有可能吗?

试试这个

I am ((\w{3})\w+)

它捕获整个单词的第一个和第二组中的前三个字符

Demo

这里是 PHP 代码:

<?php
$string = 'I am Ironman';
preg_match('/I am (\w{3}).*(man)/', $string, $matches);
var_dump($matches);

输出为:

array(3) {
  [0]=>
  string(12) "I am Ironman"
  [1]=>
  string(3) "Iro"
  [2]=>
  string(3) "man"
}

你想要的永远在$matches的第一个和第二个([1]和[2])索引中。