繁体   English   中英

匹配内部文本的正则表达式:-

[英]Regular Expression To Match a Text Inside : -

我正在构建一个需要匹配内部: text to match - 例如,如果我有这个字符串:

nathanpc/ltweet:在#StackOverflow 上提问:“正则表达式匹配内部文本:-”-@devs

我想匹配Asking a question at #StackOverflow: "Regular Expression To Match a Text Inside: -" 第一个:和最后一个-之后的所有内容,但是正确的正则表达式是什么?

PS:我正在使用 Javascript 和 jQuery

如果您使用与 Perl 兼容的正则表达式,例如大多数语言中的正则表达式:

/:(.*)-/

您可能不需要斜杠,具体取决于语言。 捕获组 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

这对我有用(红宝石):

[^:]+:\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-

“标准”正则表达式无法完全按照您的描述解析此文本。 该解析需要一些不能用正则表达式表达的上下文 比如收到第一个“-”时,表达式怎么不结束呢?

在我的脑海中,我只能使用 Perl 扩展正则表达式,它允许子表达式解析,但这并不容易,因为你必须计算“:”和“-”的出现次数才能完全匹配最后一个一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM