正则表达式 - 在指定模式后匹配

时间:2013-11-29 00:57:47

标签: regex

是否可以在某种模式之后匹配所有内容?

starting-this is my string-

例如,通过上面的示例,我知道字符串将以一些字母和连字符开头,然后我想要的值将由另一个连字符终止。

所以在这个例子中我想找到“这是我的字符串”

是否可以使用正则表达式执行此操作?

4 个答案:

答案 0 :(得分:2)

取决于。 RegExp的每个实现都是不同的。例如,您无法在JavaScript中执行此操作,但您可以在Ruby中执行此操作。您正在寻找的功能被称为"积极的后视"。

/(?<=starting-)this is my string(?=-)/

你有一个积极的外观和积极前瞻的例子:前者是一个零宽度的断言,后面是&#34;这个&#34;你有&#34;开始 - &#34;,后者是一个零宽度的断言,在&#34; string&#34;之后你有&#34; - &#34;。

RegExp的大多数版本都有前瞻性。有些人(比如JS)没有外表。

如果你没有,你可以做一些技巧。最简单的方法是制作一个非外观的正则表达式,并捕获所需的字符串:

/starting-(this is my string)-/

但是,由于匹配不能重叠,有时您可能无法使用此方法。例如,如果您尝试匹配哈希包围的单词,请尝试

/#(\w+)#/g

并尝试使用#34;我的#horse#喜欢#eat#hay#for#breakfast#&#34;,你只会得到&#34; horse&#34;,&#34 ;吃&#34; &#34; for&#34;,因为&#34; #eat#&#34;的匹配和&#34; #for#&#34;会耗尽周围的哈希&#34; hay&#34;和&#34;早餐&#34;。

另一种是反转字符串和模式,而是使用先行;但是阅读起来很恐怖,而且只有在你不需要同样模式的前瞻和后瞻时才有效。

答案 1 :(得分:1)

如果您告诉我们您正在使用的语言,这将有所帮助。对于Perl,这将起作用:

/starting-([^-]+)-/

该字符串将存储在$ 1中。单行:

$ perl -le '"starting-this is my string-" =~ m/starting-([^-]+)-/; print $1;'
this is my string

以下是an example in JavaScript

(function() {
    var str = 'starting-this is my string-';
    var matches = str.match(/starting-([^-]+)-/);
    alert(matches[1]);
})();

答案 2 :(得分:0)

是。使用此:

(?<=textyouwanttomatchafter).*

此示例适用于java,并且在其他语言中应该类似。

答案 3 :(得分:0)

您可以使用此功能捕获群组:

starting\-(.*?)\-

比赛将在第二组。

您可以使用那个匹配:

(?<=starting-).*(?=-)