我或多或少有以下几行:
$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
结果匹配并完成它。只想使此正则表达式工作。 :) 最佳答案
好吧,将最后一个.+
转换为.+?
(使用惰性量词),然后在\s*
之前添加$
:
Concepto\s+(?>de la )?(?>tr.+erencia|traspaso)\s+(?P<concepto>.+?)\s*$
^ ^^^
请参见regex demo
如果“概念”组可以为空,则将
.+?
替换为.*?
。由于*?
/ +?
是惰性的,因此将首先针对\s*
进行测试,因此所有尾随空白符号都将在“概念”组之外。同样,这里的原子团(
(?>)
)可以被单纯的非捕获((?:)
)基团取代。