Werid behavior-取自DB的Java正则表达式

Werid behavior-取自DB的Java正则表达式,java,regex,Java,Regex,我将正则表达式存储在DB-“\\\\E\\\\”中,我使用java获取它并将其与字符串匹配 我认为,由于java从DB读取数据,它知道自己可以转义SQL特殊字符,而我所需要的只是转义正则表达式的特殊字符,所以这个表达式实际上与'\\E\\\'匹配 问题是,它使用的是'\E\'而不是'\\E\\',为什么呢?如果要使用正则表达式匹配一个文字反斜杠字符,则需要在Java字符串中使用四个反斜杠 正则表达式\\匹配一个文本反斜杠 字符串“\\”表示一个反斜杠 因此,为了构建由两个反斜杠组成的正则表达式

我将正则表达式存储在DB-
“\\\\E\\\\”
中,我使用java获取它并将其与字符串匹配

我认为,由于java从DB读取数据,它知道自己可以转义SQL特殊字符,而我所需要的只是转义正则表达式的特殊字符,所以这个表达式实际上与
'\\E\\\'
匹配


问题是,它使用的是
'\E\'
而不是
'\\E\\'
,为什么呢?

如果要使用正则表达式匹配一个文字反斜杠字符,则需要在Java字符串中使用四个反斜杠

  • 正则表达式
    \\
    匹配一个文本反斜杠
  • 字符串
    “\\”
    表示一个反斜杠
  • 因此,为了构建由两个反斜杠组成的正则表达式,需要一个带有四个反斜杠的Java字符串

所以你需要
来构造一个匹配
\\E\\\

的正则表达式,我在发布这个问题的时候不得不做额外的逃避……)最好在编辑器中突出显示正则表达式,然后按Ctrl-K打开代码格式。@TimPietzcker搞得一团糟!我不得不撤销额外的逃逸…这正是你的问题所说明的问题:)它不应该是8??-->为了生成一个由两个反斜杠组成的正则表达式,您需要一个带有四个反斜杠的Java字符串。@提示:否。一个带有四个反斜杠的字符串生成一个由两个反斜杠组成的正则表达式,这两个反斜杠与一个文字反斜杠相匹配。这是我在解释中写的。如果要匹配n个反斜杠,当然需要在字符串中使用nx2反斜杠。@TimPietzcker,但我不会像这样将值放入字符串中
string rx=“///E///”
,我是从ResultSet获得的,那么为什么它要用一半的反斜杠构建正则表达式呢?我想我有点困惑:)。我以为你说需要4个反斜杠来匹配2个反斜杠文字:P@TimPietzcker我接受你的回答,但我想了解背后的原因。为什么要双击?为什么不是由开发人员构造的字符串(例如从DB获取的字符串)会再次减少特殊字符?