我使用这段代码来获取html源代码和我想要的信息。我只是测试它是否会返回我<和“!”对于第一行。但是,这行不通!
import java.io.*;
import java.net.URL;
import java.util.regex.*;
public class url
{
public static BufferedReader read(String url) throws Exception {
return new BufferedReader(
new InputStreamReader(
new URL(url).openStream()));
}
public static void main (String[] args) throws Exception{
BufferedReader reader = read(args[0]);
String line = reader.readLine();
while(line != null) {
System.out.println(line);
line = reader.readLine();
regex("//<//!",line);
}
}
public static void regex(String regex, String check){
Pattern checkregex =Pattern.compile(regex);
Matcher regexMatcher = checkregex.matcher(check);
if(regexMatcher.find()==false)
return;
while(regexMatcher.find()){
if(regexMatcher.group().length() !=0) {
System.out.println(regexMatcher.group().trim());
}
}
}
}
最佳答案
那是因为你混淆了反斜杠\
带正斜杠 /
。前者用于转义特殊字符。所以,改变这个:
regex("//<//!",line);
对此:
regex("\\<\\!",line);
也就是说,<
和!
实际上在这种情况下没有任何特殊含义,所以你可以这样写:
regex("<!",line);
如果你愿意的话。
另外,请注意上面的正则表达式匹配两个字符的子字符串 <!
。你的问题让我觉得你可能实际上想要匹配单字符子字符串 <
和!
分别地?如果是这样,您可以使用 ...|...
用于指定多个替代模式的语法:
regex("<|!",line); // matches whatever matches < or matches !
或[...]
指定字符类的语法:
regex("[<!]",line); // matches a character that is either < or !
(在这种情况下,这两种语法是等效的)。
关于第一行 < 和 "!"的 Java 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9620958/