我正在尝试检查字符串是否包含e^x
或e^(any #, including negative)x
的内容,但我无法弄明白。这是我尝试过的:
if(str.matches("^(e^x)$") || str.matches("^(e^[-?0-9]x)$")){
System.out.println("match");
}
一些匹配的例子是:
-3e^x
100e^-x
e^-2x
我引用了this,但我仍然无法弄明白。
答案 0 :(得分:4)
未转义^
匹配字符串的开头。如果在正则表达式模式中使用它并且不指定多行标志,则模式将始终失败,因为字符串的开头不能出现在它的中间。
你需要逃避^
和matches()
你不需要锚点。此外,您可以使用?
(一次或零次出现)或*
(零次或多次出现)量词:
if(str.matches("-?[0-9]*e\\^-?[0-9]*x"))
请参阅regex demo
答案 1 :(得分:3)
问题是^符号用于字符串的开头,因此如果你只想用于它之前/之前的符号。
答案 2 :(得分:2)
-?\\d*\\.?\\d*e\\^-?\\d*\\.?\\d*x
也适用于浮点数。
匹配:
e^x
-3e^x
100e^-x
e^-2x
-0.1e^2x
-0.1e^0.2x
答案 3 :(得分:0)
您所需的正则表达式将是这样的 你的正则表达式是^符号的基本问题 你必须忽略^就像开始匹配使用\ ^
<强>电子\ ^ - ?\ d * 强>
,您的代码将是
if(str.matches("e\^\-?\d*?") ){
System.out.println("match");
}
答案 4 :(得分:0)
它适用于-?\\d*e\\^-?\\d*x
- ?匹配角色 - 字面意思,量词:?在零到一次之间
\ d *匹配数字[0-9]量词:*在零和无限时间之间
e匹配字符e(区分大小写)
\ ^匹配字符^字面
- ?匹配角色 - 字面意思,量词:?在零到一次之间
\ d *匹配数字[0-9]量词:*在零和无限时间之间
答案 5 :(得分:0)
-?\\d*\\.?\\d*e\\^-?\\d*\\.?\\d*x