java正则表达式的问题,关于修饰符的简捷使用方法

vivanboy 2004-08-27 11:56:23
看到API里面关于Pattern类的CASE_INSENSITIVE常量有一句话:
Case-insensitive matching can also be enabled via the embedded flag expression (?i).

请问这里(?i)怎么加入到表达式中?

String strRegTest = "aaBB";
System.out.println(strRegTest.matches("^[ab]+(?i)$"));
还是打印出false!到底(?i)应该放在表达式哪里?

请不要告诉我使用Pattern.compile("^[ab]+$",Pattern.CASE_INSENSITIVE);这种方法,太繁琐
...全文
306 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
vivanboy 2004-08-27
  • 打赏
  • 举报
回复
谢谢楼上的,为什么
String strRegTest = "aaBB";
System.out.println(strRegTest.matches("^[(?i:ab)]+$"));
还是这里还是打印false?
registered 2004-08-27
  • 打赏
  • 举报
回复
public class MatchFlag {
public static void main(String[] args) {
Pattern p = Pattern.compile("abcd(?i:EFGhijKL)mn");
Matcher m = p.matcher("abcdefghijklmn");
System.out.println(m.matches());
}
}

Pattern.UNIX_LINES
d
Treat \n as the only line terminator.

Pattern.DOTALL
s
Dot (.) matches any character, including a line terminator.

Pattern.MULTILINE
m
^ and $ match next to embedded line terminators.

Pattern.COMMENTS
x
Ignore whitespace and allow embedded comments starting with #.

Pattern.CASE_INSENSITIVE
i
Case-insensitive match for ASCII characters.

Pattern.UNICODE_CASE
u
Case-insensitive match for Unicode characters.
vivanboy 2004-08-27
  • 打赏
  • 举报
回复
我觉得:
System.out.println(Pattern.compile("^[ab]+$",Pattern.CASE_INSENSITIVE).matcher(strRegTest).matches());太麻烦,有没有其他解决办法?
vivanboy 2004-08-27
  • 打赏
  • 举报
回复
我觉得对于贪婪模式这种也应该如同(?i)一样采用一个修饰符可以改变为非贪婪模式,这样会方便很多。好多语言都有这个修饰符。看来sun考虑得还不周全
registered 2004-08-27
  • 打赏
  • 举报
回复
[] 确切的说是"一个字符集合中任意一个字符",
如果不加其他修饰符的确只占"一个字符"的位置

贪婪, 懒惰, 抢占(Possessive, 翻译的可能不恰当)等模式
只在使用量化器(quantifier)时才有意义
例如:
a+ 是 Greedy
a+? 是 Reluctant
a++ 是 Possessive
vivanboy 2004-08-27
  • 打赏
  • 举报
回复
匹配默认是贪婪模式,有没有什么修饰符更改为非贪婪模式的
vivanboy 2004-08-27
  • 打赏
  • 举报
回复
但[]表示一个字母,这一点我不认可,应该是一个模式集合的分界符
vivanboy 2004-08-27
  • 打赏
  • 举报
回复
好,讲的精辟

加分
registered 2004-08-27
  • 打赏
  • 举报
回复
当然也可以关闭
(?-i)
(?-i:string)
registered 2004-08-27
  • 打赏
  • 举报
回复
你表达式有问题
[] 只表示一个字母, 而不是一个字串
使用
^(?i:[ab]+)$
或者
(?i)^[ab]+$
(?i) 代表后面的表达式一律是大小写无关的
(?i:string) 只是冒号后面的表达式大小写无关的

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧