我的任务是找到猫王(使用eclipse搜索)。有没有我可以用来找他的正则表达式?
“Elvis Operator”(?:
)是Java三元运算符的缩写。
我尝试了\?[\s\S]*[:]
,但它与多线不匹配
有没有这样的重构我可以将Elvis变成if-else块?
答案 0 :(得分:4)
修改强> 对不起,我已经为三元运算符发布了一个正则表达式,如果你的问题是多行的,你可以使用它:
\?(\p{Z}|\r\n|\n)*:
答案 1 :(得分:2)
如果要跨多行匹配,则需要明确匹配行分隔符。无论如何,\ R将匹配它们中的任何一个(与平台无关),或者您可以使用适当的文件(\ r,\ n,\ r \ n)。例如。如果只有一个换行符,\?.*\R*.*:
将有效。但是,您不能在字符类中使用\ R,因此如果您不知道运算符可能跨越多少行,则必须使用行分隔符和可能出现在字符分隔符中的任何字符构造一个字符类。操作数。像([-\r\n\w\s\[\](){}=!/%*+&^|."']*)\?([-\r\n\w\s\[\](){}=!/%*+&^|."']*):([-\r\n\w\s\[\](){}=!/%*+&^|."']*)
这样的东西。我已经包含了括号来将操作数捕获为组,以便您可以找到并替换。
但是,如果这是Java(可能还有其他任何语言),那么你有一个非常大的问题。三元条件?:运算符创建表达式,而if语句不是表达式。考虑:
boolean even = true;
int foo = even ? 2 : 3;
int bar = if (even) 2 else 3;
第三行在语法上是不正确的;两个条件结构不相等。 (如果您使用我的正则表达式查找和替换,您实际从第二行获得的是if (int foo = even) 2 else 3;
还有其他问题。)
所以,你可以找到带有正则表达式的?:运算符(或者类似的东西;我可能错过了你需要在类中包含的一些字符),但是你不一定能用'if'替换它们。 '陈述。