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