我正在嘗試匹配@relRef但不是@@absRef來(lái)自:Stuff @relRef more stuff @@absRef據(jù)我了解,[^@]@{1}[^\s]*應(yīng)該可以,但它仍然錯(cuò)誤地選擇兩者。并不{1}意味著我認(rèn)為我所做的?(我認(rèn)為這意味著“與前一件事完全匹配1次”)[^@]@[^@][^\s]*確實(shí)有效,但對(duì)于我的用例來(lái)說(shuō)不太方便,更重要的是,我不明白為什么我原來(lái)的解決方案不起作用。最后,如果這個(gè)答案是多個(gè)字符,那么無(wú)論這個(gè)答案最終會(huì)發(fā)生什么變化。(即,如果句子是Stuff AT_relRef more stuff ATAT_absRef這樣,那么現(xiàn)在我不會(huì)檢查單個(gè)@字符,而是檢查“AT”。)長(zhǎng)話短說(shuō):1)為什么[^@]@{1}[^\s]*匹配@@absRef以及如何將其修復(fù)為僅匹配@relRef?2) 如果我使用多個(gè)字符來(lái)標(biāo)記引用,#1 的答案是否會(huì)改變?(即AT_relRef和ATAT_absRef)
1 回答

九州編程
TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個(gè)贊
您的正則表達(dá)式匹配兩者,因?yàn)?code>[^\s]它匹配任何字符,但空格也會(huì)匹配該@
字符。在這兩種情況下都匹配空格[^@]
,因此它沒有足夠的幫助。此外,@{1}
與 相同@
,{1}
量詞在任何正則表達(dá)式中始終是多余的。
您可以使用
(?<!@)@[^\s@]\S*
請(qǐng)參閱正則表達(dá)式演示。
細(xì)節(jié)
(?<!@)
-@
不在當(dāng)前位置之前@
- 一個(gè)@
字符[^\s@]
@
- 除和 空格之外的字符\S*
- 0 個(gè)或多個(gè)非空白字符。
對(duì)于第二種情況,負(fù)向回顧也將起作用:
(?<!AT)AT_\S*
請(qǐng)參閱正則表達(dá)式演示。它匹配
(?<!AT)
- 前面沒有的任何位置AT
AT_
- 一個(gè)子AT_
串\S*
- 0+ 個(gè)除空格之外的字符。
- 1 回答
- 0 關(guān)注
- 201 瀏覽
添加回答
舉報(bào)
0/150
提交
取消