只从字符串中提取采集组

问题描述 投票:0回答:1

我有以下规则。

https:/regex101.comrnoX9lj4。

我想在脚本中实现这个功能,所以我使用grep这样的方法。

echo "\$this->table('test')" | grep -Po "qr/\$this->table\(\'(test)\'\);/"

输出应该是 "test"

它没有工作,不知道为什么。

regex
1个回答
2
投票

grep -Po "qr

 echo "\$this->table('test');" | grep -oP "\\\$this->table\\('\\K[^']+(?='\\);)" 

或者,如果你把一个文件路径输入到 grep:

grep -oP "\\\$this->table\\('\\K[^']+(?='\\);)" file

在线 grep 演示

匹配 $在一个双引号的字符串中,你需要用反斜杠转义,在一个双引号的字符串中,你需要转义为 $ 本身用一个反斜线字符来停止变量的扩展,然后你需要再加两个反斜线来对字面意义的 $ 字符,因此是 "\\\$" 的模式中。

要匹配两个单引号之间的任何文本,您可以使用 [^']+ - 1个或更多的字符,除了 '.

搜索引擎演示

图案细节

  • \$this->table\(' - $this->table(' 绳子
  • \K - 匹配重置操作符,从整个匹配缓冲区中丢弃匹配到目前为止的文本。
  • [^']+ - 以外的一个或多个字符 '
  • (?='\);) - 积极的展望,需要 '); 字符串紧靠当前位置的右边。

1
投票

有多个问题。

  1. 由于某些原因,不得不用 "cat "代替echo。
  2. 用这个规则代替。

grep -oP "this->table\('\K\w+(?='\);)"

© www.soinside.com 2019 - 2024. All rights reserved.