如何更改java中的正则表达式搜索以忽略大小写
我怎样才能更改以下代码,使其不关心案例如何更改java中的正则表达式搜索以忽略大小写,java,regex,Java,Regex,我怎样才能更改以下代码,使其不关心案例 public static String tagValue(String inHTML, String tag) throws DataNotFoundException { String value = null; Matcher m = null; int count = 0; try { String searchFor = "<" +
public static String tagValue(String inHTML, String tag)
throws DataNotFoundException {
String value = null;
Matcher m = null;
int count = 0;
try {
String searchFor = "<" + tag + ">(.*?)</" + tag + ">";
Pattern pattern = Pattern.compile(searchFor);
m = pattern.matcher(inHTML);
while (m.find()) {
count++;
return inHTML.substring(m.start(), m.end());
// System.out.println(inHTML.substring(m.start(), m.end()));
}
} catch (Exception e) {
throw new DataNotFoundException("Can't Find " + tag + "Tag.");
}
if (count == 0) {
throw new DataNotFoundException("Can't Find " + tag + "Tag.");
}
return inHTML.substring(m.start(), m.end());
}
首先,阅读
一般来说,要回答您的问题,您可以在正则表达式的开头加上?i:
String searchFor = "(?i)" + "<" + tag + ">(.*?)</" + tag + ">";
您应该知道Java正则表达式中不区分大小写的含义
默认情况下,不区分大小写的匹配假定仅匹配US-ASCII字符集中的字符。可以通过将Unicode_case标志与此标志一起指定来启用支持Unicode的不区分大小写匹配
看起来您正在匹配标记,因此您只需要US-ASCII。将标志指定给:
哦,并考虑.
你也可以用不区分大小写的标志编译模式:
Pattern pattern = Pattern.compile(searchFor, Pattern.CASE_INSENSITIVE);
对于这个仅ASCII的示例来说,这无关紧要,但如果不添加UNICODE_大小写,那么您将在希腊符号之类的事情上遇到麻烦,因为有两个小写版本和一个大写版本,并且其中任何一个都需要不区分大小写的匹配才能匹配其中任何一个和所有三个。感谢您捕获UNICODE_大小写标志;请永远忘记这一点。事后看来,如果这些标志分别被命名为ASCII_CASE_INSENSITIVE和UNICODE_SIMPLE_CASE_INSENSITIVE,可能会更好,从而为最终的UNICODE_FULL_CASE_INSENSITIVE打开了大门,因为当引擎升级到进行完全大小写折叠,而不是现在只进行简单的大小写折叠时。请注意,Java的字符串方法执行完整的大小写映射,而它的字符方法只执行简单的大小写映射。@tchrist,完整和简单之间的区别是否与补充文档中的Turkish i类似?我忘记了unicode规范大小写映射中的术语?不,这是特定于语言环境的大小写。“完全大小写”是指您可以取回一个长度因代码点计数而不同于输入长度的输出字符串。@tchrist,明白了。例如,ÆON vs Aeon,其中第一个使用ae连字。实际上,Æ的casefold只是æ一个代码点,尽管ffi的casefold是ffi三个代码点。
String searchFor = "<" + tag + ">(.*?)</" + tag + ">";
Pattern pattern = Pattern.compile(searchFor, Pattern.CASE_INSENSITIVE);
m = pattern.matcher(inHTML);
Pattern pattern = Pattern.compile(searchFor, Pattern.CASE_INSENSITIVE);