我或多或少有以下几行:
$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<concepto>.+)$|
很好地捕获了每个字符串的结尾部分:
"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<concepto>.+)(?>\s+)?$
或
Concepto\s+(?>de la )?(?>tr.+erencia|traspaso)\s+(?P<concepto>.+)\s*$
但显然没有工作。不能制作内联修饰符例如(U
)适用于concepto
群组。
而且我知道我不能trim
结果匹配并完成它。只是想让这个正则表达式工作。 :)
答案 0 :(得分:5)
好吧,将最后一个.+
转换为.+?
(使用延迟量词)并在\s*
之前添加$
:
Concepto\s+(?>de la )?(?>tr.+erencia|traspaso)\s+(?P<concepto>.+?)\s*$
^ ^^^
请参阅regex demo
如果&#34; concepto&#34;组可以为空,请将.+?
替换为.*?
。由于*?
/ +?
是惰性的,因此\s*
将首先进行测试,因此所有尾随空白符号都将在&#34; concepto&#34;之外。基。
此外,此处的原子组((?>)
)可以仅用非捕获((?:)
)组替换。