Java 用户将输入一些筛选条件——如何将其转换为String.match的正则表达式
我有一个程序,用户将输入一个字符串,例如Java 用户将输入一些筛选条件——如何将其转换为String.match的正则表达式,java,regex,Java,Regex,我有一个程序,用户将输入一个字符串,例如 PropertyA=“abc_*”我需要星号匹配任何字符 在我的代码中,我获取属性值并用实际值替换PropertyA。例如,它可以是abc\u 123。我还将相等符号拉入变量 它应该能够涵盖这类标准 PropertyB='cba' 房地产!='*-这是 valueFromHeader是左侧,value是右侧 if (equality.equals("=")) { result = valueFromHeader.matches(value); }
PropertyA=“abc_*”
我需要星号匹配任何字符
在我的代码中,我获取属性值并用实际值替换PropertyA
。例如,它可以是abc\u 123
。我还将相等符号拉入变量
它应该能够涵盖这类标准
PropertyB='cba'
房地产!='*-这是
valueFromHeader
是左侧,value
是右侧
if (equality.equals("=")) {
result = valueFromHeader.matches(value);
} else if (equality.equals("!=")) {
result = !valueFromHeader.matches(value);
}
编辑:
现有代码对正则表达式进行了这种类型的替换
final String ESC = "\\$1";
final String NON_ALPHA = "([^A-Za-z0-9@])";
final String WILD = "*";
final String WILD_RE_TEMP = "@";
final String WILD_RE = ".*";
value = value.replace(WILD, WILD_RE_TEMP);
value = value.replaceAll(NON_ALPHA,ESC);
value = value.replace(WILD_RE_TEMP, WILD_RE);
它不喜欢这里的下划线
abcSite_123 != abcSite_123 (evaluates to true)
abcSite_123$1.matches("abcSite$1123")
它不喜欢下划线…将
*
替换为*
value=value.replace("*",".*");//replace * with .*
如果您的值包含
+
,?
,这将不起作用,因为它们在正则表达式中都有特殊的含义。如果它们存在,请将其转义。到目前为止您尝试的方法中有什么不起作用?请包括您的整个方法,并说明什么不起作用。我用一些已经存在的现有代码替换了原来的问题。测试时,如果我给它abcSite!='abc*'
I获取abcSite!=\Qabc*\E
计算结果为True(基于否定匹配的if语句)。为了从逻辑上更容易确保我的逻辑正确,我尝试了abcSite='abc*'
,计算结果为false
,这很有效!让我用更多的输入来测试它。