当前位置:  开发笔记 > 编程语言 > 正文

捕获行尾字符串,但避免捕获匹配的尾随字符

如何解决《捕获行尾字符串,但避免捕获匹配的尾随字符》经验,为你挑选了1个好方法。

我或多或少有以下几行:

$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.+)$|

这很好地捕获了每个字符串的末尾部分:

  "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.+)(?>\s+)?$

要么

Concepto\s+(?>de la )?(?>tr.+erencia|traspaso)\s+(?P.+)\s*$

但显然没有工作.无法使内联修饰符Eg(U)适用于该concepto组.

我知道我不能trim完成比赛并完成比赛.只是想让这个正则表达式工作.:)



1> Wiktor Strib..:

好吧,将最后一个.+转为.+?(使用延迟量词)并在\s*之前添加$:

Concepto\s+(?>de la )?(?>tr.+erencia|traspaso)\s+(?P.+?)\s*$
                                                                ^ ^^^

请参阅正则表达式演示

如果"concepto"组可以为空,请替换.+?.*?.由于*?/ +?是懒惰,\s*将首先测试,因此所有尾随空白符号将在"concepto"组之外.

此外,(?>)这里的原子组()可以仅用非捕获((?:))组替换.

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有