一位正則表達式新手......抱歉。我有一個帶有IEEE格式引文的文檔,或括號中的數字。它們可以是[23]中的一個數字,或者[5,7,14]中的幾個,或者[12-15]中的一個範圍。需要一個正則表達式來捕獲編號引用
我現在擁有的是[\[|\s|-]([0-9]{1,3})[\]|,|-]
。
這是捕獲單個數字和組中的第一個數字,但不包括後續數字或範圍內的任何數字。 然後,我需要在像\1
這樣的表達式中引用該數字。
我希望這是明確的!我懷疑我不懂OR操作符。
一位正則表達式新手......抱歉。我有一個帶有IEEE格式引文的文檔,或括號中的數字。它們可以是[23]中的一個數字,或者[5,7,14]中的幾個,或者[12-15]中的一個範圍。需要一個正則表達式來捕獲編號引用
我現在擁有的是[\[|\s|-]([0-9]{1,3})[\]|,|-]
。
這是捕獲單個數字和組中的第一個數字,但不包括後續數字或範圍內的任何數字。 然後,我需要在像\1
這樣的表達式中引用該數字。
我希望這是明確的!我懷疑我不懂OR操作符。
這個怎麼樣?
(\[\d+\]|\[\d+-\d+\]|\[\d+(,\d+)*\])
其實這可以更siplified到:(\[\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]!
空格被不考慮,但如果你需要
你可以將它們添加我認爲吉姆的答案是有幫助的,但一些推廣和編碼更好理解:
如果問題一直在尋找更復雜,但是可能一個像[1,3-5]
:
(\[\d+(,\s?\d+|\d*-\d+)*\])
^^^^ optional space after ','
//validates:
[3,33-24,7]
[3-34]
[1,3-5]
[1]
[1, 2]
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>]'
*/
感謝所有的答案,以及進入他們的想法。我搜索了以前提交的答案,每個Wiktor的評論,但還沒有找到它... –
我不認爲我明確表示,我試圖提取每個一到三位數字,分開。 –
當你用正則表達式找到'[1,2]'時,嘗試分解它並解析你的鏈接。這個替換的代碼添加到我的答案。我希望它能幫助你。 @PeterBasch – MohaMad
''''裏面'[']'與一個文字管道符號相匹配。 –
它似乎已經拋棄了我的正則表達式......我現在擁有的是「[\ [| \ s | - ]([0-9] {1,3})[\] |,| - ]」 –
是的,你的模式是一團糟。將樣例輸入和預期輸出發佈到使用正則表達式的代碼中。 –