你好,
我的java代码如下:
Pattern p = Pattern.compile("^[a-zA-Z0-9$&+,:;=\\[\\]{}?@#|\\\\'<>._^*()%!/~\"` -]*$");
String i = "f698fec0-dd89-11e8-b06b-☺";
Matcher tagmatch = p.matcher(i);
System.out.println("tagmatch is " + tagmatch.find());
正如预期的那样,答案将是false,因为里面有☺
字符。但是,我想显示不匹配的列号。对于本例,它应该显示第25列有无效字符。
我可以知道我怎么做吗?
1条答案
按热度按时间t9aqgxwy1#
您应该从正则表达式中删除锚点,然后使用
Matcher#end()
方法获取它停止前一个匹配的位置,如下所示:lookingAt()
来确保我们从区域的开头开始匹配模式。您也可以使用find()
在任何地方获得下一个匹配,或者将模式中的起始锚点保留为并使用
find()
有效地使其行为类似于上面使用lookingAt()
的代码。Read difference between
lookingAt()
andfind()
我已经重构了正则表达式,使用
\w
代替[a-zA-Z0-9_]
,并使用量词+
(表示匹配1或更多)代替*
(表示匹配0或更多),以避免对零长度匹配返回成功。