Java 在正则表达式中为字符集、固定长度和字符串开头和结尾的步幅发出问题

Java 在正则表达式中为字符集、固定长度和字符串开头和结尾的步幅发出问题,java,regex,regular-language,Java,Regex,Regular Language,最初,我要求检查给定字符串是否遵循以下两种模式 “^(.{1,5})?$”——用于检查字符串的长度是否达到5个字符 “[!-~]|”([!-~][-~]*[!-~])”-表示字符串不以空格开头或结尾 早些时候,当字符串与任何消息都不匹配时,我们将给出两条不同的消息,因此我的处理方式如下: Pattern pattern1 = Pattern.compile("^(.{1,5})?$"); Pattern pattern2 = Pattern.compile("[!-~]|([

最初,我要求检查给定字符串是否遵循以下两种模式

  • “^(.{1,5})?$”
    ——用于检查字符串的长度是否达到5个字符
  • “[!-~]|”([!-~][-~]*[!-~])”
    -表示字符串不以空格开头或结尾
早些时候,当字符串与任何消息都不匹配时,我们将给出两条不同的消息,因此我的处理方式如下:

    Pattern pattern1 = Pattern.compile("^(.{1,5})?$");
    Pattern pattern2 = Pattern.compile("[!-~]|([!-~][ -~]*[!-~])");
    Matcher matcher1=pattern1.matcher(" verify");
    Matcher matcher2 = pattern2.matcher("verify");
    System.out.println("Message1 - " + matcher1.matches());
    System.out.println("Message2 - " + matcher2.matches());
但现在的要求是我们需要: --我们需要将以上两种模式结合起来,但是

--还包括字符串可以包含以下字符$、#、@而不是字母、数字

--并给出一条信息

我看了很多类似的问题,比如: 制作一个单一的正则表达式,如:

Pattern pattern3=Pattern.compile(
  "^[^\\\s][[-a-zA-Z0-9-()@#$]+(\\\s+[-a-zA-Z0-9-()@#$]+)][^\\\s]{1,50}$");
但是正则表达式不能正常工作。 如果我提供了一个字符串,其中包含的字符不是正则表达式中提到的字符,如“%”,则该字符串应已失败,但已通过

我正试图找出上述正则表达式或任何新正则表达式中有什么问题可以满足需要

@编辑以使其更清晰: 有效输入:“地狱@”

无效输入:“地狱”(有whitespace@beging)


无效输入:“Hell%”不需要字符“%”

以下是一种模式,它应该满足您的两个要求:

^\S(?:.{0,3}\S)?$
这表示要匹配:

\S        an initial non whitespace character
(
    .{0,3}    zero to three of any character (whitespace or non whitespace)
    \S        a mandatory ending whitespace character
)?        the entire quantity optional

您可以使用此正则表达式:

^(?!\s)[a-zA-Z\d$#@ ]{1,5}(?<!\s)$
^(?!\s)[a-zA-Z\d$#@]{1,5}(?)?

正则表达式详细信息:

  • ^
    :开始
  • (?!\s)
    :负前瞻,开始时不允许有空间
  • [a-zA-Z\d$#@{1,5}
    :允许这些字符的长度介于1到5之间
  • (?:负向后看,结束前不允许有空格
  • $
    :结束

为什么必须只对正则表达式执行此操作?只需调用length()即可检查字符串长度是否在1到5之间,并且可以测试Character.isWhitespace(string.charAt(0))和at length()-最后一个字符为1。@anubhava添加了更清晰的字符inputs@emilles我们有一个特定的框架,它使用正则表达式并完成所有工作,因此我们不必使用java方法,因为每个模式的长度等要求都会有所不同,然后我们必须反复编写代码agian@RamandeepSingh:
Hello@
有6个字符,但您必须输入ned最多只允许5个?这很好,但您的示例是Java的,这让人困惑。您可以提供一个纯正则表达式示例以及示例输入。感谢@anubhava,它工作得很好,事实上,我需要更多的自定义,我能够做到这一点。您可以将正则表达式缩短为以下内容:
/^(?!\s)[\w!”$%&*+:=@,\/;?^-'{}]{1,5}(?