Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.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,我有以下代码片段: Pattern patternOfSlashContainingBackSlash=Pattern.compile("\\/"); Pattern patternOfSlashNotContainingBackSlash=Pattern.compile("/"); String slash = "/"; Matcher matcherOfSlashContainingBackSlash = patternOfSlashContainingBackSlash.matcher

我有以下代码片段:

Pattern patternOfSlashContainingBackSlash=Pattern.compile("\\/");
Pattern patternOfSlashNotContainingBackSlash=Pattern.compile("/");

String slash = "/";

Matcher matcherOfSlashContainingBackSlash = patternOfSlashContainingBackSlash.matcher(slash);
Matcher matcherOfSlashNotContainingBackSlash = patternOfSlashNotContainingBackSlash.matcher(slash);

//both patterns match the slash
System.out.println(matcherOfSlashContainingBackSlash.matches());
System.out.println(matcherOfSlashNotContainingBackSlash.matches());  
我的问题是:

  • 从Java的角度来看,这两种模式之间有什么区别,或者有什么区别

  • 从Java的角度来看,“/”字符是否只是正则表达式的普通字符(而不是像“]”这样的特殊字符

  • 我运行这个的java版本是1.8

    这个问题与其他问题不同,因为它清楚地表明,Java编程语言的模式“\\/”和“/”是相同的


    多谢各位

    /
    在Java正则表达式中不是特殊字符
    “\\/”
    相当于
    “/”
    /
    在Java正则表达式中并不特殊,而是在JavaScript中我们有语法
    /regex/flags
    。Java允许转义字符,即使它们不需要转义字符,这可能是为了使这样的正则表达式更具可移植性。所以
    Pattern.compile(\\/”
    Pattern.compile(“/”
    的行为都是一样的


    顺便说一句,
    ]
    本身不是特殊字符。如果它不是
    […]
    构造的一部分,您不需要转义它,但您可以转义它(至少在Java中,我不确定其他正则表达式的风格)。

    正斜杠
    /
    字符在Java
    模式中不是命令字符(在正常的
    字符串中也不是),不需要逃跑

    反斜杠字符
    \
    需要在Java
    字符串
    s中转义,因为它用于编码特殊序列,如换行符(
    “\n”

    例如,
    字符串单反斜杠=“\\”

    由于反斜杠还用于表示Java
    Pattern
    表示中的特殊结构,因此在
    Pattern
    定义中可能需要双转义

    例如,
    patternsingelash=Pattern.compile(“\\\\”)


    有关涉及反斜杠的
    模式
    构造的示例,请参见。

    无需转义斜杠字符。Java正则表达式语法的参考是类的Javadoc。在那里,它列出了所有具有特殊意义的字符。该列表中没有斜杠。

    我认为人们之所以转义
    /
    字符,是因为它们来自不同的正则表达式风格(如Javascript),您可以在两个斜杠之间定义一个模式,将其包围,如果您想匹配一个斜杠,则需要转义

    var pattern = /\d\/\d/; // Valid pattern of 2 digits divided by a slash, which must be escaped.
    

    但是,从Java的角度来看,它是等效的,因此没有必要逃避它。

    据我所知,它不会有太大的区别。将转义斜杠放在字符前面通常意味着必须将该字符视为文字字符。。。除非它有特殊意义。在文本的情况下,斜杠是可选的,不需要。。。IntelliJ还说这是一个多余的字符转义。可能是@radoh的重复,我不认为这个问题是重复的,因为它还澄清了一个事实,即“\\/”和“/”模式之间没有区别。谢谢
    var pattern = /\d\/\d/; // Valid pattern of 2 digits divided by a slash, which must be escaped.