是否可以在某种模式之后匹配所有内容?
starting-this is my string-
例如,通过上面的示例,我知道字符串将以一些字母和连字符开头,然后我想要的值将由另一个连字符终止。
所以在这个例子中我想找到“这是我的字符串”
是否可以使用正则表达式执行此操作?
答案 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
(function() {
var str = 'starting-this is my string-';
var matches = str.match(/starting-([^-]+)-/);
alert(matches[1]);
})();
答案 2 :(得分:0)
是。使用此:
(?<=textyouwanttomatchafter).*
此示例适用于java,并且在其他语言中应该类似。
答案 3 :(得分:0)
您可以使用此功能捕获群组:
starting\-(.*?)\-
比赛将在第二组。
您可以使用那个匹配:
(?<=starting-).*(?=-)