我或多或少有以下几行:
$strings = [ "Concepto de la transferencia Un concepto uno ", "Concepto traspaso Orden #121231", "Concepto trasnferencia 121231 Magical Concept ", ]
并有以下正则表达式:
|Concepto\s+(?>de la )?(?>tr.+erencia|traspaso)\s+(?P.+)$|
这很好地捕获了每个字符串的末尾部分:
"Un concepto uno " "Orden #121231" "121231 Magical Concept "
(包括尾随空格).但是当我们存在时,我希望匹配排除尾随空格.导致:
"Un concepto uno" "Orden #121231" "121231 Magical Concept"
我试过了:
Concepto\s+(?>de la )?(?>tr.+erencia|traspaso)\s+(?P.+)(?>\s+)?$
要么
Concepto\s+(?>de la )?(?>tr.+erencia|traspaso)\s+(?P.+)\s*$
但显然没有工作.无法使内联修饰符Eg(U
)适用于该concepto
组.
我知道我不能trim
完成比赛并完成比赛.只是想让这个正则表达式工作.:)
好吧,将最后一个.+
转为.+?
(使用延迟量词)并在\s*
之前添加$
:
Concepto\s+(?>de la )?(?>tr.+erencia|traspaso)\s+(?P.+?)\s*$ ^ ^^^
请参阅正则表达式演示
如果"concepto"组可以为空,请替换.+?
为.*?
.由于*?
/ +?
是懒惰,\s*
将首先测试,因此所有尾随空白符号将在"concepto"组之外.
此外,(?>)
这里的原子组()可以仅用非捕获((?:)
)组替换.