我正在构建一个需要匹配: text to match -
内的文本的项目。例如,如果我有这个字符串:
nathanpc / ltweet:在#StackOverflow上提问:“正则表达式匹配内部文本: - ”--devs
我想匹配Asking a question at #StackOverflow: "Regular Expression To Match a Text Inside : -"
。在第一个:
和最后一个-
之后的所有内容,但执行此操作的正确正则表达式是什么?
PS:我在jQuery中使用Javascript
答案 0 :(得分:2)
如果你正在使用与Perl兼容的正则表达式,就像在大多数语言中找到的那样:
/:(.*)-/
根据语言的不同,您可能不需要斜杠。捕获组1将获得您想要的内容。
.*
是一个贪婪的匹配器,所以它会尝试匹配尽可能多的字符,直到输入中的最后一个短划线。
答案 1 :(得分:1)
如果使用像.
之类的贪婪运算符,它将尝试形成最大匹配(至少在Perl兼容的正则表达式引擎中)
所以要匹配像:(.*)-
这样简单的东西。
在Perl中查看此示例脚本:
my $str = "Discard:Testing:- one two three -discard";
$str =~ m/:(.*)-/;
print $1;
$1 = "Testing:- one two three"
或在javascript中:http://www.regular-expressions.info/javascriptexample.html
答案 2 :(得分:1)
这适合我(红宝石):
[^:]+:\s+([^-]+.*?)\s-
测试:
test = "nathanpc/ltweet: Asking a question at #StackOverflow: 'Regular Expression To Match a Text Inside : -' - @devs"
m = test.match /[^:]+:\s+([^-]+.*?)\s-/
然后
m[1].to_s
产生
Asking a question at #StackOverflow: 'Regular Expression To Match a Text Inside : -'
正如其他人已经注意到更简单:(.*)-
的工作方式相同。也许没有空格:\s(.*)\s-
答案 3 :(得分:0)
“标准”正则表达式无法完全按照您的描述解析此文本。解析需要一些 context ,不能用正则表达式表示。例如,当收到第一个“ - ”时,表达式如何不结束?
在我的脑海中,我只能使用Perl扩展的正则表达式,允许子表达式解析,但这并不容易,因为你必须计算出“:”和“ - ”的匹配来匹配完全是最后一个。