Вам нужно явно сопоставить разделители строк, если вы хотите сопоставить несколько строк. \ R будет соответствовать любому из них (независимо от платформы), в Eclipse 3.4 в любом случае, или вы можете использовать правильный для вашего файла (\ 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;
, что имеет дополнительные проблемы.)
Итак, вы можете найти операторы?: С приведенным выше регулярным выражением (или что-то подобное; возможно, я пропустил некоторые символы, которые нужно включить в класс), но вы не обязательно сможете заменить их на «если 'заявления.