java - 正则表达式第一个字符不匹配

标签 java regex find match

我遇到一些 Java 模式问题。这是我的模式:

"^[\\p{L}\\p{Digit}~._-]+$"

它匹配 US-ASCII 的任何字母、数字、一些特殊字符,基本上任何不会扰乱 URL 的内容。

我想要的是找到与此模式不匹配的单词中的第一个字母。基本上,用户发送文本作为输入,我必须验证它并在发现非法字符时抛出异常。

我尝试否定此模式,但它无法正确编译。而且 find() 也没有多大帮助。

合法的输入应该是 hello?hello 不应该是,我的异常应该指出 ? 不正确。

我更喜欢使用 Java 的 Matcher、Pattern 或使用 util.regex 的建议。这不是必需的,但单独检查字符串中的每个字符并不是解决方案。

编辑:我想出了一个更好的正则表达式来匹配未保留的 URI 字符

最佳答案

试试这个:

^[\\p{L}\\p{Digit}.'-.'_]*([^\\p{L}\\p{Digit}.'-.'_]).*$

第一个不匹配的字符是组 n°1

我在这里做了一些尝试:http://fiddle.re/gkkzm6 1

说明:

我否定了你的模式,所以我构建了这个:

[^\\p{L}\\p{Digit}.'-.'_]      [^...] means every character except for
^                       ^             the following ones.
|  your pattern inside  |

该模式由 3 部分组成:

^[\\p{L}\\p{Digit}.'-.'_]*

从第一个字符开始检查正则表达式,直到遇到不匹配的字符

([^\\p{L}\\p{Digit}.'-.'_]) 

捕获组内的不匹配字符(否定)

.*$

字符串末尾之前的任何字符。

希望对你有帮助

编辑:

正确的正则表达式应该是:

^[\\p{L}\\p{Digit}~._-]*([^\\p{L}\\p{Digit}~._-]).*$

同样的方法,只是改变了第一部分和第二部分的内容。

我尝试过,似乎有效。

关于java - 正则表达式第一个字符不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36593392/

相关文章:

php - 检查字符串中是否存在单词数组

java - 在 Java 中应该使用什么舍入方法来计算金钱?

java - 使用专有 header 反编译已编译的 Java 文件

php - WP HTML 缩小类不起作用

c# - 正则表达式用字符串 C# 中的数字匹配多次出现

java - MONGODB - 使用 JAVA 查找 "_id"

java - 如何隐藏 jlist 直到单击按钮?

java - 使用 Java 内部类的最佳方式

regex - 仅使用起始值匹配多行事件

visual-studio - 是否有正则表达式可以在一个句子中找到两个不同的词?