正则表达式删除某个字符前的字符?

时间:2013-04-11 19:08:54

标签: regex perl

我是正则表达式的新手,而且说实话它让我很困惑。我需要在所述字符串中达到某个字符后抓取字符串。我认为最简单的方法就是使用正则表达式,但就像我说的那样我很新。任何人都可以帮我这个或指出我正确的方向吗?

例如: 我需要检查字符串“23444:thisstring”并将“thisstring”保存为新字符串。

4 个答案:

答案 0 :(得分:4)

如果这是你的字符串:

I'm very new at regex, and to be completely honest it confounds me

并且你想要在第一个“c”之后抓取所有内容,然后这个正则表达式将起作用:

/c(.*)/s

它将在第一个匹配的组中返回此匹配:

"ompletely honest it confounds me"

在此处使用正则表达式测试器进行尝试:regex tester

说明:

  • c是您要找的角色
  • .*(与/s相结合)匹配所有内容
  • (.*)捕获.*匹配的内容,使其在$1中可用并在列表上下文中返回。

答案 1 :(得分:1)

  

用于删除某个字符前的字符的正则表达式!

您可以使用这样的前瞻

.*(?=x)

其中x是特定字符或单词或字符串。{使用.$^*+等字符具有特殊含义在正则表达式中所以不要忘记在x}

中使用它时逃避

修改

您的样本字符串将是

.*(?=thisstring)

.*匹配0到多个字符,直到thisisstring

答案 2 :(得分:0)

这是一个用于匹配“之前”

之后的所有内容的单行解决方案
print $1."\n" if "beforeafter" =~ m/before(.*)/;

编辑: 虽然使用lookbehind是可能的,但它不是必需的。分组提供了一种更简单的解决方案。

答案 3 :(得分:0)

要获取之前的字符串:在您的示例中,您必须使用[^:][^:]*:\(.*\)。请注意,您应该至少有一个[^:]后跟任意数量的[^:],后跟一个实际的:,即您要搜索的字符。