[英]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.