簡體   English   中英

如何否定正則表達式驗證字符串?

[英]How to negate regex validation string?

我想替換所有字符串,除了@ [anyword]

我有這樣的字符串:

yng nnti dkasih tau :)"@mazayalinda: Yg klo ada cenel busana muslim aku mau ikutan dong "@noviwahyu10: Model ! Pasti gk blh klo k

@mazayalinda@noviwahyu10匹配我的正則表達式@\\w*

但是,除上述兩個單詞外,我需要除去所有字符串。 我們需要進行否定@[anyword] ,但是我對合並2個正則表達式感到困惑,這兩個正則表達式分別匹配@[anyword]和一個用來除掉這兩個單詞之外的所有句子的正則表達式。

有任何想法嗎?

從上下文中還不清楚這是否可行,但是當您要替換除特定模式以外的所有內容時,聽起來更像是希望使用正則表達式搜索而不是替換。 例如,在python中,它可能類似於:

>>> import re
>>> s = 'yng nnti dkasih tau :)"@mazayalinda: Yg klo ada cenel busana muslim aku mau ikutan dong "@noviwahyu10: Model ! Pasti gk blh klo k'
>>> re.findall(r'@\w+', s)
['@mazayalinda', '@noviwahyu10']

編輯:在js中,像這樣更合適:

var s = 'yng nnti dkasih tau :)"@mazayalinda: Yg klo ada cenel busana muslim aku mau ikutan dong "@noviwahyu10: Model ! Pasti gk blh klo k';

// code from http://www.activestate.com/blog/2008/04/javascript-refindall-workalike
var rx = new RegExp("@\\w+", "g");
var matches = new Array();
while((match = rx.exec(s)) !== null){
    matches.push(match);
}

此后, matches包含所有匹配的字符串。 如果需要,您始終可以將其重新連接在一起,成為一個字符串。

在我看來,您想使用捕獲組,而不是完全否定字符串的其余部分,例如正則表達式:

[^@]*(@\w+)[^@]*

將在捕獲組中捕獲這些條目,然后根據您的語言,您可以訪問每個捕獲的字符串: http : //rubular.com/r/qHKb35OK3g

使用此正則表達式(?<=^|@\\w+\\b)[^@]+和聯合匹配

好吧,我不太確定我是否理解這個問題,但是,如果您只想保留名稱並僅使用其余名稱來“擺脫它”,為什么不簡單地保存名稱並忽略其余名稱呢?

如果您熱衷於匹配“非名稱模式”-這似乎是某種對話的摘錄,其中每條消息均以“:”開頭。 如果是這樣,那么只需使用此技巧即可。

:[^ @] *

您可以使用零寬度的否定斷言,即@(?!mazayalinda|noviwahyu10)\\w

這需要一些復雜的正則表達式引擎,例如Perl,Ruby,Java等。 如果您有經典引擎,最好使用@pcalcao sais的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM