所以我试图在几个选项中拆分一个字符串,但这些选项只允许发生一次。我已经弄清楚如何使它匹配所有选项,但是当一个选项出现两次或更多时,它匹配每个选项。
示例字符串:--split1 testsplit 1 --split2 test split 2 --split3 t e s t split 3 --split1 split1 again
正则表达式:/-{1,2}(split1|split2|split3) [\w|\s]+/g
现在它匹配所有情况,我希望它只匹配--split1
,--split2
和--split3
一次(因此--split1 split1 again
将不匹配)。
我可能错过了一些非常直接的事情,但有人愿意帮忙吗? :)
修改:
决定处理脚本中出现的额外事件,而不是通过RegEx,更容易处理错误。谢谢你的帮助!
答案 0 :(得分:0)
编辑:我不知何故从PHP部分到此处,因此PHP代码。但是,相同的原则适用于任何其他语言。
我意识到OP已经表示他们已经找到了解决方案,但我将此放在未来的访客中。
function splitter(string $str, int $splits, $split = "--split")
{
$a = array();
for ($i = $splits; $i > 0; $i--) {
if (strpos($str, "$split{$i} ") !== false) {
$a[] = substr($str, strpos($str, "$split{$i} ") + strlen("$split{$i} "));
$str = substr($str, 0, strpos($str, "$split{$i} "));
}
}
return array_reverse($a);
}
此函数将分割字符串,以及将分割的段数。像这样使用它:
$array = splitter($str, 3);
它会成功地围绕$split
参数爆炸数组
参数使用如下:
$str
--split1 testsplit 1 --split2 test split 2 --split3 t e s t split 3 --split1 split1 again
。$splits
--split1
和--split3
但没有--split2
,那么该数组将只拆分两次。$split
--myNewSplit
进行拆分,则会将该字符串附加一个从1到$splits
的数字。所有元素都以空格结尾,因为函数会查找$split
,并且每次拆分前都有一个空格。如果您不想拥有尾随空格,则可以将代码更改为:
$a[] = trim(substr($str, strpos($str, "$split{$i} ") + strlen("$split{$i} ")));
另外,请注意strpos
在分隔符后面查找空格。同样,如果您不想要空格,请将其从字符串中删除。
我使用某个功能的原因是,如果您决定要进行四次拆分或更改分隔符,它将在未来为您提供灵活性。
显然,如果您不再需要数字更改分隔符,则explode
function就可以用于此目的。
答案 1 :(得分:-1)
-{1,2}((split1)|(split2)|(split3)) [\w|\s]+
这样的东西?在这种情况下,这将创建3个数组,其中所有数组都具有相同名称的元素数组。希望这有帮助