2014-02-14 97 views
0

我已經這樣設置的URL,正則表達式來僅排除某些字符

www.abc.com/some-text/ 
www.xyz.com/some-text/ 
www.pqr.com/page/2/ 

我需要獲取URL預計包含單詞的URL「頁」 我的正則表達式是.*/(.(?!page)).* 它不是working.can人指出我的問題和解決方案?

+0

那麼如果'page'出現在路徑以外的地方呢?例如,'foo.bar/baz?page = 4'? – fge

回答

1

使用以下正則表達式。 (指定^$以確保沒有字符後跟page)。

"^(.(?!\\bpage\\b))+$" 

String pattern = "^(.(?!\\bpage\\b))+$"; 
System.out.println("www.abc.com/some-text/".matches(pattern)); // true 
System.out.println("www.xyz.com/some-text/".matches(pattern)); // true 
System.out.println("www.pqr.com/page/2/".matches(pattern)); // false 
+1

不需要用'String#matches'指定'^'和'$'錨點,它已經匹配整個輸入字符串。它不會使正則表達式錯誤,但只是有點多餘:) – sp00m

+0

@ sp00m,你說得對。感謝您的評論。我將保留其他不涉及'String.matches'的其他用例的答案。 – falsetru

1

您是不是要找除了或者期待在您的問題?

您可以通過lookahead選項忽略其中有page的網址。

/^(?!.*page).*/ 

如果你想挑它有網頁網址,然後

/^(?=.*page).*/ 
4

你爲什麼要找的正則表達式?這可以通過使用String.contains(String s)

String string ="www.pqr.com/page/2/"; 
if(string.contains("page")){ 
    //true 
} 
0

您可以使用正則表達式來完成:

(^(?:.(?!\bpage\b))+$) 

檢查DEMO

CODE:

String regex="(^(?:.(?!\\bpage\\b))+$)"; 
String lines[]={ 
     "www.abc.com/some-text/", 
     "www.xyz.com/some-text/", 
     "www.pqr.com/page/2/" 
}; 
for(String line:lines){ 
    if(line.matches(regex)){ 
     System.out.println(line); 
    } 
} 

OUTPUT:

www.abc.com/some-text/ 
www.xyz.com/some-text/ 

說明

enter image description here

1

使用URI

public boolean containsPage(final String input) 
{ 
    return URI.create(input).getPath().contains("page"); 
} 

這使得搜索page中選擇路徑組件並不會如果存在上當在th e主機名/查詢字符串/片段部分。