我或多或少有以下几行:
$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
小组工作。
而且我知道我不能只是修剪
结果匹配并完成它。只是想让这个正则表达式起作用。 :)
最佳答案
那么,将最后一个 .+
变成 .+?
(使用惰性量词)并在 $ 之前添加
:\s*
Concepto\s+(?>de la )?(?>tr.+erencia|traspaso)\s+(?P<concepto>.+?)\s*$
^ ^^^
请参阅regex demo
如果“concepto”组可以为空,请将 .+?
替换为 .*?
。由于 *?
/+?
是惰性的,因此将首先测试 \s*
,因此所有尾随空白符号都将在外部“概念”组。
此外,此处的原子组 ((?>)
) 可以替换为纯粹的非捕获 ((?:)
) 组。
关于php - 捕获行尾字符串,但避免捕获匹配的尾随字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41875348/