2014-02-14 71 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主机名/查询字符串/片段部分。