Intereting Posts

regex: удалить весь текст внутри «двойных кавычек» (включая многострочные)

Мне сложно удалить текст в двойных кавычках, особенно те, которые распространяются по нескольким строкам:

$file=file_get_contents('test.html'); $replaced = preg_replace('/"(\n.)+?"/m','', $file); 

Я хочу удалить ВСЕ текст в двойных кавычках (в комплекте). Некоторые тексты внутри них будут распространяться по нескольким строкам.

Я читал, что новые строки могут быть \r\n и \n .

Попробуйте следующее выражение:

"[^"]+"

Также убедитесь, что вы заменили глобально (обычно с флагом g – мой PHP ржавый, поэтому проверьте документы).

Другое редактирование: решение даальбера лучше всего: цитата, сопровождаемая одним или несколькими не кавычками, заканчивающимися цитатой.

Я бы сделал одну небольшую модификацию, если вы разбираете HTML: сделайте это 0 или более символов без кавычек … так что регулярное выражение будет:

 "[^"]*" 

РЕДАКТИРОВАТЬ:

С другой мыслью, вот лучший:

 "[\S\s]*?" 

Это говорит: «цитата, сопровождаемая символом без пробелов или символом пробела любое количество раз, не жадностью, заканчивающимся цитатой»,

В приведенном ниже примере используются группы захвата, когда это необязательно … и использование подстановочного знака здесь явно не указывает на то, что этот шаблон соответствует всем, кроме символа новой строки … так что более ясно сказать: «либо символ без пробелов или символ пробела ":) – не то, чтобы он имел какое-либо значение в результате.


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

 "(.*?(\s)*?)*?" 

это гласит:

найти необязательную цитату: (любое количество символов, которые не являются символами новой строки, не жадными, за которым следует любое количество пробельных символов, не жадно), повторяется любое количество раз, не жаднее

жадный означает, что он перейдет к концу строки и попытается сопоставить ее. если он не может найти совпадение, он идет один от конца и пытается совпадения, и так далее. поэтому не жадный означает, что он найдет как можно меньше символов, чтобы попытаться сопоставить критерии.

отличная ссылка на регулярное выражение: http://www.regular-expressions.info
отличная ссылка для проверки регулярных выражений: http://regexpal.com/

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

Вы можете использовать однострочный режим (также известный как dotall), и точка будет соответствовать даже новой строке (независимо от того, что они есть):

 /".+?"/s 

Вы используете многострочный режим, который просто изменяет значение ^ и $ от начала / конца строки до начала / конца текста. Вам здесь не нужно.

"[^"]+"

Что-то вроде ниже. s – это dotall режим, где . будет соответствовать даже новой строке:

 /".+?"/s 
 $replaced = preg_replace('/"[^"]*"/s','', $file); 

сделают это за вас. Однако обратите внимание, что это не позволит использовать кавычки с двойным кавычком (например, A "test \" quoted string" B приведет к A quoted string" B с ведущим пространством, а не AB как вы могли бы ожидать.