我有一份带有IEEE风格引文或括号中数字的文档。它们可以是一个数字,如[23],或几个,如[5,7,14],或一个范围,如[12-15]。我现在有[\[|\s|-]([0-9]{1,3})[\]|,|-]。这是捕获单个数字和组中的第一个数字,但不捕获后续数字或范围中的任何一个数字。然后我需要在一个像\1这样的表达式中引用这个数字。
[\[|\s|-]([0-9]{1,3})[\]|,|-]
\1
hyrbngr71#
这个怎么样?(\[\d+\]|\[\d+-\d+\]|\[\d+(,\d+)*\])实际上,这可以更简化为:(\[\d+-\d+\]|\[\d+(,\d+)*\])
(\[\d+\]|\[\d+-\d+\]|\[\d+(,\d+)*\])
(\[\d+-\d+\]|\[\d+(,\d+)*\])
my @test = ( "[5,7,14]", "[23]", "[12-15]" ); foreach my $val (@test) { if ($val =~ /(\[\d+-\d+\]|\[\d+(,\d+)*\])/ ) { print "match $val!\n"; } else { print "no match!\n"; } }
这将打印:
match [5,7,14]! match [23]! match [12-15]!
不考虑空格,但如果需要,可以添加空格
vc6uscn92#
我认为Jim的答案是有帮助的,但是为了更好地理解一些概括和编码:
[1,3-5]
(\[\d+(,\s?\d+|\d*-\d+)*\]) ^^^^ optional space after ',' //validates: [3,33-24,7] [3-34] [1,3-5] [1] [1, 2]
Demo for this Regex用链接替换digits的JavaScript代码:
//define input string: var mytext = "[3,33-24,7]\n[3-34]\n[1,3-5]\n[1]\n[1, 2]" ; //call replace of matching [..] that calls digit replacing it-self var newtext = mytext.replace(/(\[\d+(,\s?\d+|\d*-\d+)*\])/g , function(ci){ //ci is matched citations `[..]` console.log(ci); //so replace each number in `[..]` with custom links return ci.replace(/\d+/g, function(digit){ return '<a href="/'+digit+'">'+digit+'</a>' ; }); }); console.log(newtext); /*output: '[<a href="/3">3</a>,<a href="/33">33</a>-<a href="/24">24</a>,<a href="/7">7</a>] [<a href="/3">3</a>-<a href="/34">34</a>] [<a href="/1">1</a>,<a href="/3">3</a>-<a href="/5">5</a>] [<a href="/1">1</a>] [<a href="/1">1</a>, <a href="/2">2</a>]' */
2条答案
按热度按时间hyrbngr71#
这个怎么样?
(\[\d+\]|\[\d+-\d+\]|\[\d+(,\d+)*\])
实际上,这可以更简化为:
(\[\d+-\d+\]|\[\d+(,\d+)*\])
这将打印:
不考虑空格,但如果需要,可以添加空格
vc6uscn92#
我认为Jim的答案是有帮助的,但是为了更好地理解一些概括和编码:
[1,3-5]
:Demo for this Regex
用链接替换digits的JavaScript代码: