2016-01-25 4 views
0

Как заменить специальный символ между двумя специальными строками.Заменить символ между двумя строками в синтаксисе PCRE (Perl)

У меня есть что-то вроде этого:

"start 1 
2- 
G 
23 
end" 

Я хочу иметь следующее:

"start 1 2- G 23 end" 

только заменить \ п с пространством между "начала и конца"

Test1;Hello;"Text with more words";123 
Test2;want;"start 
1- 
76 end";123 
Test3;Test;"It's a test";123 
Test4;Hellp;"start 
1234 
good- 
the end";1234 
Test5;Test;"It's a test";123 

Возможно ли это в блокноте ++?

+0

И в чем проблема? Что вы подразумеваете под особыми строками? –

+0

Как я могу поймать каждую строку в переменной $ 1, $ 2 и так, чтобы заменить символ \ n wir space? – cSteusloff

+0

Вам не нужно регулярное выражение, используйте простую замену строк. (или лучше, перевод) –

ответ

4

Вы можете использовать этот шаблон:

(?:\G(?!\A)|\bstart\b)(?:(?!\bend\b).)*\K\R 

demo

детали:

(?: 
    \G(?!\A)  # contiguous to a previous match 
    | 
    \bstart\b  # this is the first branch that matches 
) 
(?:(?!\bend\b).)* # zero or more chars that are not a newline nor the start of the word "end" 
\K     # remove all on the left from the match result 
\R     # any newline sequence (\n or \r\n or \r) 

Примечание: (?:(?!\bend\b).)* не очень эффективен, f угорь, чтобы заменить его чем-то лучше для вашего конкретного случая.

+0

Спасибо, что отлично работает. Это можно использовать в блокноте ++? – cSteusloff

+1

@cSteusloff: для блокнота ++, замените '\ A' на'^'. –

0

Волшебные слова ленивый квантор, lookaheads и режим однострочный.
Раствор для PHP (используется PCRE) будет:

<?php 
$string = __your_string_here__; 

$regex = '~(?s)(?:start)(?<content>.*?)(?=end)(?s-)~'; 
# ~ delimiter 
# (?s) starts single line mode - aka dot matches everything 
# (?:start) captures start literally 
# .*? matches everything lazily 
# (?=end) positive lookahead 
# (?s-) turn single line mode off 
# ~ delimiter 
preg_match_all($regex, $string, $matches); 
$content = str_replace("\n", '', $matches["content"][1]); 
echo $content; // 1234good-the 

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