Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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,我想在特定字符串中匹配正斜杠/或反斜杠\,例如: 1. 你好/你好/再见/ 2. 你好\你好\再见\ 3. 你好\你好/再见\ 4. HiHelloBye 在给定的字符串中,只有最后一条记录不应匹配,因为它既不包含/也不包含\ 我正在使用的内容 if (strFile.matches(".*//.*")) { //String Matches. } else { //Does not match. } 这仅与正斜杠/匹配。我不知道如何为斜杠(用于或条件)编写正则表达式。您要匹配

我想在特定字符串中匹配正斜杠
/
或反斜杠
\
,例如:
1. <代码>你好/你好/再见/
2. <代码>你好\你好\再见\
3. <代码>你好\你好/再见\
4. <代码>HiHelloBye
在给定的字符串中,只有最后一条记录不应匹配,因为它既不包含
/
也不包含
\

我正在使用的内容

if (strFile.matches(".*//.*"))
{
    //String Matches.
}
else
{
    //Does not match.
}
这仅与正斜杠
/
匹配。我不知道如何为斜杠(用于
条件)编写正则表达式。

您要匹配的“字符”是:

"[/\\\\]"
首先为字符串复制反斜杠,然后再次为正则表达式复制反斜杠

当您需要在同样使用反斜杠转义字符串的语言中使用反斜杠时,这可能是最糟糕的正则表达式

Java编译器在源代码中看到字符串
“\\\\”
,并实际将其转换为
“\\\”
(因为它使用
\
作为转义字符)

然后正则表达式会看到
“\\”
,并且由于它也将
\
用作转义字符,因此会将其视为单个
\
字符

正如刘燕在一篇评论中指出的那样,您可以通过使用以下方法之一消除一级反斜杠(regex one):

这可能会使它更具可读性

完成所有缩减后,您指定了一个由两个斜杠组成的字符类,如果所讨论的字符与其中任何一个匹配,则返回true

以下代码显示了此操作:

public class testprog {
    public static void checkString (String s) {
        boolean yes = s.matches(".*[/\\\\].*");
        System.out.println ("'" + s + "': " + yes);
    }

    public static void main (String s[]) {
        checkString ("Hi/Hello/Bye/");
        checkString ("Hi\\Hello\\Bye\\");
        checkString ("Hi\\Hello/Bye\\");
        checkString ("HiHelloBye");
    }
}
它输出:

'Hi/Hello/Bye/': true 'Hi\Hello\Bye\': true 'Hi\Hello/Bye\': true 'HiHelloBye': false “你好/你好/再见/”:对 “你好\你好\再见\”:正确 “嗨\你好/再见\”:对 “HiHelloBye”:错误 你想要:

strFile.matches(".*[/\\\\].*")
具体地说,将
/
替换为
[/\\\\\]


您只需要一个正斜杠,但需要4个反斜杠,因为一个反斜杠是字符串中的转义符,而2是正则表达式的转义符,所以您需要4个。

使用替换:
strFile.matches(.*(/\124;\\\\).*)
匹配正斜杠或反斜杠。您可能想看看。

使用此

[]
将为您提供功能

Pattern pat = Pattern.compile("[/\\\\]");
Matcher m = pat.matcher("Hi/Hello/Bye/");

while (m.find()){

    System.out.println(m.group());
}

当我尝试
“abc/efg”.matches(“/|\\\\”)
时,它返回false
matches
匹配整个字符串,因此非常需要
*
。您可能想看看Java字符串文档:-),因为转义发生了2次(一次用于Java,一次用于regexp),看起来很难读取,所以有时我会使用
\x5C
\0134
表示regexp字符串中的单个
\
字符。因此,由于字符串转义,regexp变成了
*[/\x5C].*
实际上是
[/\\x5C]
,但我明白你的意思。我将添加到答案中。
匹配
匹配整个字符串,因此非常需要像这样的
s.matches(.*[/\\\].*)
@KumarVivekMirta您是对的。我使用
模式
匹配器
进行了尝试。这很好。说另一个人是对的需要很大的勇气。。。坚持下去。。。这就是造就一个有个性的人的原因。。。。。为你干杯。。。
Pattern pat = Pattern.compile("[/\\\\]");
Matcher m = pat.matcher("Hi/Hello/Bye/");

while (m.find()){

    System.out.println(m.group());
}