Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用正则表达式匹配仅包含字母数字字符、破折号和下划线的字符串_Java_Regex - Fatal编程技术网

Java 如何使用正则表达式匹配仅包含字母数字字符、破折号和下划线的字符串

Java 如何使用正则表达式匹配仅包含字母数字字符、破折号和下划线的字符串,java,regex,Java,Regex,全部: 我想做的是使用正则表达式匹配一个只允许[a-Za-z0-9_-]的字符串,格式应该是: 仅从[A-Za-z0-9]开始,然后是[A-Za-z0-9_-]。中间可能存在[--],但如果存在,则只允许一次(既可以存在,也可以存在,但每个都只有一次机会),以[-ZA-Z0-9]结束。 我只知道如何匹配字母数字字符、破折号和下划线,但不知道如何限制它们的出现时间 谢谢您可以使用负前瞻: ^(?!.*(-[^-]*-|_[^_]*_))[A-Za-z0-9][\w-]*[A-Za-z0-9]$

全部:

我想做的是使用正则表达式匹配一个只允许[a-Za-z0-9_-]的字符串,格式应该是:

仅从[A-Za-z0-9]开始,然后是[A-Za-z0-9_-]。中间可能存在[--],但如果存在,则只允许一次(既可以存在,也可以存在,但每个都只有一次机会),以[-ZA-Z0-9]结束。 我只知道如何匹配字母数字字符、破折号和下划线,但不知道如何限制它们的出现时间


谢谢

您可以使用负前瞻:

^(?!.*(-[^-]*-|_[^_]*_))[A-Za-z0-9][\w-]*[A-Za-z0-9]$
说明:
  • ^
    -行开始
  • (?!*([^-]*-|[^.]*.])
    -负向前看,这意味着如果前面有两个下划线或两个连字符,则匹配失败
  • [A-Za-z0-9]
    -匹配1个字母数字字符
  • [\w-]*
    -匹配0个或多个
    [A-Za-z0-9.-]
    字符
  • $
    -匹配行结束

谢谢,我对RE很陌生,你能给我一点解释吗?我不太明白我在回答中添加了解释谢谢,我打开了Regex演示:但我想知道为什么“foo-bar_-baz”不匹配,它应该匹配实际上
foo-bar_-baz
匹配。有多个输入
[^-]*
也匹配
\n
。投票!这是惊人的,但你能给我一点更多的细节,如何神秘的消极前瞻部分的工作?我想这应该是我首先想到的。