捕获行尾字符串但避免捕获匹配的尾随字符
capture end of line string but avoid capturing matching trailing characters
我或多或少有以下几行:
$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 "
(包括尾随空格)。但我希望匹配 exclude 尾随空格(当它们存在时)。结果:
"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*$
^ ^^^
如果"concepto"组可以为空,将.+?
替换为.*?
。由于 *?
/ +?
是惰性的,因此 \s*
将首先进行测试,因此所有尾随空白符号都将在 "concepto" 组之外。
此外,这里的原子团 ((?>)
) 可以仅替换为 non-capturing ((?:)
) 个原子团。
我或多或少有以下几行:
$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 "
(包括尾随空格)。但我希望匹配 exclude 尾随空格(当它们存在时)。结果:
"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*$
^ ^^^
如果"concepto"组可以为空,将.+?
替换为.*?
。由于 *?
/ +?
是惰性的,因此 \s*
将首先进行测试,因此所有尾随空白符号都将在 "concepto" 组之外。
此外,这里的原子团 ((?>)
) 可以仅替换为 non-capturing ((?:)
) 个原子团。