2014-03-18 3 views
0

Мне сложно найти правильное регулярное выражение для использования для выполнения этой задачи - RegEx используется как FIND/REPLACE в ECLIPSE JUNO в большом файле.Регулярное выражение (RegEx): Добавить пробелы между каждым символом окруженного предложения

Вот сценарий; У меня есть строки комментариев, как это (очевидно, что это просто пример):

/********** BEGIN - CODE SECTION **********/ 
    $code = "Regex"; 
    echo "<p>{$code}</p>"; 
/********** END - CODE SECTION **********/ 

И я хотел бы, чтобы выглядеть следующим образом, с помощью функции Regex из FIND/REPLACE в Eclipse, Juno:

/********** B E G I N - C O D E S E C T I O N **********/ 
    $code = "Regex"; 
    echo "<p>{$code}</p>"; 
/********** E N D - C O D E S E C T I O N **********/ 

И я попробовал много вещей, в том числе и тот, который я думал, был на правильном пути:

FIND:

(\*{10}) ([A-Z \-]){1}([A-Z \-])* (\*{10}) 

ЗАМЕНА:

$1 $2 $3 $4 

... если предположить, что пространство между $2 и $3 будет делать трюк, но то, что я получаю вместо этого:

/********** D T **********/ 

Я новичок RegEx (очевидно), все еще учась, и был бы очень благодарен не только за решение, но и за объяснение, если это возможно, чтобы это стало опытом обучения для меня и других.

Спасибо!

EDIT/UPDATE:

я не получил никаких ответов пока (что редко в SO после [почти] час проходит), так что я сломаю вниз, и добавить объяснение код RegEx, который я пытался.

  • Код (*{10}) в начале и в конце строки RegEx выбирает 10 звездочки **********.

  • В центре выражения, я попытался найти и захватить, где одна буква ВЕРХНИЙ (или дефис) ([A-Z -]){1} ближайшие перед одним или более заглавной буквы [с] ([A-Z -])* произошло.

  • Затем я входной ЗАМЕНИТЬ строка, которая должна была использовать все четыре «Захваченные группы» (с $1 и $4 является открытие и закрытие набора 10-звездочками ...

  • .. й остальные две групп, представляющих найденное письмо $2, и письмо, которое последовавшим за ней $3 - но с пробелом между ними ...

  • ... который я предполагал RegEx бы как-нибудь повторить это действие для всех букв в предложении.

ответ

0

Если вы можете принять регулярное выражение, которое только убеждается, что десять звездочек следовать тексту (и игнорирует все, что предшествует ему), то вы можете попробовать что-то вроде

FIND:[^*](?=[^*]*\*{10,}/)

ЗАМЕНИТЬ:"$0 " (цитаты добавлены, чтобы лучше визуализировать одно пространство).

Используется positive lookahead assertion, чтобы убедиться, что после текущего символа (который может не быть звездочкой) следует последовательность **********/. Ваш подход с повторными группами захвата не работает, потому что каждое повторение перезаписывает предыдущий матч.

Посмотри live on regex101.com.

Смежные вопросы