正则表达式匹配最后一个空格之后和方括号之前的字符串

时间:2018-04-27 16:38:03

标签: regex perl

我有一些文字跟随下面的模式:

  

一些带有许多空格的文本[方括号内的一些文字]。

我想要一个正则表达式,匹配最后一个空格字符后面的单词,以及开始方括号之前的单词。在这个例子中,它将是“空格”。

在此online tester上尝试此正则表达式。* \ s(。*)\ [后,我尝试使用Perl内联

$ cat file-containing-pattern.txt | perl -ne "print $1 if s/.*\s(.*)(\[)/\1/"

但它打印出来:

  

方括号内的空间文本]。

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

四个问题:

  • 您错误地引用了该命令,导致shell插入$1
  • 您在正则表达式之外使用\1,这没有任何意义。
  • 当你没有意义时,你正在使用替换。
  • 您依靠Perl内部来找到正确的匹配,而不是使用准确的模式。

修正:

perl -nle'print $1 if / \s ( [^\s\[]+ ) \[ /x' file

答案 1 :(得分:0)

你得到匹配并替换困惑。匹配是正确的,你用捕获组1重新进行。但是,您不会在第2组和第34组之后替换文本,([)"。

你想要匹配并打印

cat file-containing-pattern.txt | perl -ne 'm/.*\s(.*)\[/ and print $1;'

或者您可以替换匹配以外的所有内容

 cat file-containing-pattern.txt | perl -pe 's/.*\s(.*)\[.*/$1/;'