重复捕获组时遇到问题:
(?:'[)(?:(?:'s*?)([2-9AQTKJ][shcd])+?(?:'s*?)).*?(?:'])
查看演示
基本上我只想在方括号内匹配卡值(As
、8h
等)组合
任何帮助将不胜感激。
谢谢
您可以使用带有'G
运算符的正则表达式来匹配[...]
中的多个子字符串:
(?:'[|(?!^)'G)'s*'K[2-9AQTKJ][shcd](?=[^']]*])
查看正则表达式演示
简而言之,此 PCRE 正则表达式将匹配以下文本:
-
(?:'[|(?!^)'G)'s*'K
- 以[
开头,或在上一个成功匹配的末尾,后跟零个或多个空格符号 -
[2-9AQTKJ][shcd]
- 匹配每个定义的集合 2 个字符 -
(?=[^']]*])
- 积极的展望,检查当前仓位之前是否有收盘]
PHP演示:
$re = '~(?:'[|(?!^)'G)'s*'K[2-9AQTKJ][shcd](?=[^']]*])~';
$str = "[As 4h 8s] [ As 4h ] [As4h] As [ 4h ";
preg_match_all($re, $str, $matches);
print_r($matches[0]);
这是你想要的吗?
/'[([^']]+)']/
https://regex101.com/r/vT8aC8/2
编辑(完整的PHP解决方案)
$str= "[As 4h 8s] [ As 4h ] [As4h] As [ 4h ";
preg_match_all("/'[([^']]+)']/", $str, $matches);
$values = $matches[1];
$result = [];
foreach($values as $value)
{
$parts = preg_split("/ /", $value, -1, PREG_SPLIT_NO_EMPTY);
foreach($parts as $part)
{
array_push($result, $part);
}
}
var_dump($result); // $result will contain all the values you want