使用分组操作分组是否有一些警告?
在perl:
print join("|",split(m/(A|AND)/,"foo A bar"))."\n";
预期:
foo | bar
输出:
foo |A| bar
Powershell的预期/输出相同:
([regex]::Split("foo A bar","(A|AND)"))-join"|"
似乎在使用分组时出现问题 - 没有括号一切都很好:
([regex]::Split("foo A bar","A|B"))-join"|"
输出符合预期:
foo | bar
但是当我引入分组以便能够使用多字符替换(用填充字符环绕 - “\ s(A | AND)\ s”)时,分割开始意外地表现。
分裂实际上在做什么 - 正在执行什么样的拆分?为什么分裂我可能不会被执行?我有什么选择?
答案 0 :(得分:4)
使用非捕获括号分割正则表达式(?:..)
print join("|",split(m/(?:A|AND)/,"foo A bar"))."\n";
来自perldoc,
如果PATTERN包含捕获组,则对于每个分隔符,将为组捕获的每个子字符串生成一个附加字段(按照指定组的顺序,根据后向引用);如果任何组不匹配,则它捕获undef值而不是子串。
同样适用于PowerShell(或更确切地说.Net)。来自documentation:
如果在Regex.Split表达式中使用捕获括号,则任何捕获的文本都包含在结果字符串数组中。例如,如果在捕获括号内的连字符上拆分字符串“plum-pear”,则返回的数组包含一个包含连字符的字符串元素。