正则表达式 - 匹配第一个字面值

时间:2014-09-13 17:14:01

标签: regex

我有一些代码行,我试图删除一些前导文本,如下所示:

Line 1: myApp.name;
Line 2: myApp.version
Line 3: myApp.defaults, myApp.numbers;

我正在尝试并尝试查找将删除任何内容(但不包括在内)myApp的正则表达式。

我尝试了各种正则表达式,但是当它遇到第3行时它们似乎都失败了(因为myApp出现了两次)。

我到目前为止最接近的是:

.*?myApp

非常简单 - 但它匹配第3行中myApp事件的两个实例 - 而我希望它只匹配第一个。

有几百行 - 否则我现在已全部手动删除它们。

有人能帮助我吗?感谢。

2 个答案:

答案 0 :(得分:2)

您需要添加一个与行的起点匹配的锚^

^.*?(myApp)

DEMO

使用上述正则表达式并将匹配的字符替换为$1\1。这样你就可以在替换后的最终结果中得到字符串myApp

模式说明:

  • ^开始一行。
  • .*?(myApp)最短的可能匹配到第一个myApp。捕获字符串myApp并将其存储到一个组中。( group 1
  • 所有匹配的字符将替换为组1中存在的字符。

答案 1 :(得分:1)

如果添加^以确保只匹配行的开头,则正则表达式在Perl中有效:

cat /tmp/test.txt  | perl -pe 's/^.*?myApp/myApp/g'
myApp.name;
myApp.version
myApp.defaults, myApp.numbers;

如果你想获得幻想,你可以把'#34; myApp"使用(?=)语法将一部分作为表达式的一部分捕获到的组中。这样就不必重新替换它。

cat /tmp/test.txt  | perl -pe 's/^.*?(?=myApp)//g'
myApp.name;
myApp.version
myApp.defaults, myApp.numbers;