Регулярное выражение для замены текста между двумя тегами с помощью Notepad ++ [duplicate]

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'") or die(mysql_error());

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

Иногда подавление запроса как @mysql_query(your query);

81
задан user990423 11 November 2015 в 20:00
поделиться

13 ответов

Вы можете использовать "<pre>(.*?)</pre>", (заменяя pre на любой текст, который вы хотите) и извлекаете первую группу (для более конкретных инструкций указывается язык), но это предполагает упрощенное представление о том, что у вас очень простой и допустимый HTML.

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

108
ответ дан PyKing 4 September 2018 в 08:32
поделиться

Вы можете использовать Pattern pattern = Pattern.compile( "[^<'tagname'/>]" );

0
ответ дан Ambrish Rajput 4 September 2018 в 08:32
поделиться

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

В простейших терминах html не является обычным языком, поэтому вы невозможно полностью проанализировать с помощью регулярных выражений.

Сказав, что вы можете анализировать подмножества html, если вложенных тегов не существует. Итак, до тех пор, пока что-либо между и не является этим тегом, это будет работать:

preg_match("/<([\w]+)[^>]*>(.*?)<\/\1>/", $subject, $matches);
$matches = array ( [0] => full matched string [1] => tag name [2] => tag content )

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

$obj = new DOMDocument();
$obj -> load($html);
$obj -> getElementByTagName('el');
$value = $obj -> nodeValue();

И так как это правильный парсер, он сможет обрабатывать теги вложенности и т. д.

6
ответ дан Community 4 September 2018 в 08:32
поделиться

Это то, что я хотел бы использовать.

(?<=(<pre>))(\w|\d|\n|[().,\-:;@#$%^&*\[\]"'+–/\/®°⁰!?{}|`~]| )+?(?=(</pre>))

В основном, что он делает:

(?<=(<pre>)) Выбор должен быть добавлен с тегом <pre>

(\w|\d|\n|[().,\-:;@#$%^&*\[\]"'+–/\/®°⁰!?{}|~]| ) Это просто регулярное выражение, которое я хочу применить. В этом случае он выбирает символ буквы или цифры или символ новой строки или некоторые специальные символы, перечисленные в примере в квадратных скобках. Символ трубы | просто означает «ИЛИ».

+? Плюс символьные состояния для выбора одного или нескольких из вышеуказанного порядка не имеют значения. Вопросительный знак изменяет поведение по умолчанию от «жадного» до «неровного».

(?=(</pre>)) Выбор должен быть добавлен тегом <pre>

В зависимости от вашего варианта использования вам может потребоваться добавить некоторые модификаторы, такие как (i или m)

  • i - нечувствительность к регистру
  • m - multi -line search

Здесь я выполнил этот поиск в Sublime Text, поэтому мне не пришлось использовать модификаторы в моем регулярном выражении.

Javascript не поддерживает lookbehind

Вышеприведенный пример должен отлично работать с такими языками, как PHP, Perl, Java ... Javascript, однако, не поддерживает lookbehind, поэтому мы должны забыть об использовании (?<=(<pre>)) и искать какое-то обходное решение. Возможно, просто нарисуйте первые четыре символа из нашего результата для каждого выбора, например, здесь Текст, соответствующий регулярному выражению между тегами

Также посмотрите на JAVASCRIPT REGEX DOCUMENTATION для не захватывающие круглые скобки

10
ответ дан ctwheels 4 September 2018 в 08:32
поделиться

Для нескольких строк:

<htmltag>(.+)((\s)+(.+))+</htmltag>
0
ответ дан Dilip 4 September 2018 в 08:32
поделиться

Попробуйте это ....

(?<=\<any_tag\>)(\s*.*\s*)(?=\<\/any_tag\>)
3
ответ дан Heriberto Rivera 4 September 2018 в 08:32
поделиться

Чтобы исключить теги разметки:

"(?<=<pre>)(.*?)(?=</pre>)"
1
ответ дан Jean-Simon Collard 4 September 2018 в 08:32
поделиться

Это, кажется, самое простое регулярное выражение всего, что я нашел

(?:<TAG>)([\s\S]*)(?:<\/TAG>)
  1. Исключить тег открытия (?:<TAG>) из совпадений
  2. Включить любые пробелы или - пробельные символы ([\s\S]*) в совпадениях
  3. Исключить закрывающий тег (?:<\/TAG>) из совпадений
0
ответ дан maqduni 4 September 2018 в 08:32
поделиться

var str = "Lorem ipsum <pre>text 1</pre> Lorem ipsum <pre>text 2</pre>";
    str.replace(/<pre>(.*?)<\/pre>/g, function(match, g1) { console.log(g1); });

Поскольку принятый ответ не содержит кода javascript, поэтому добавление:

1
ответ дан Shishir Arora 4 September 2018 в 08:32
поделиться

используйте шаблон ниже, чтобы получить контент между элементами. Замените [тег] на фактический элемент, из которого вы хотите извлечь содержимое.

<[tag]>(.+?)</[tag]>

Иногда теги будут иметь атрибуты, такие как тэг anchor, имеющий href, а затем использовать шаблон ниже.

 <[tag][^>]*>(.+?)</[tag]>
6
ответ дан Shravan Ramamurthy 4 September 2018 в 08:32
поделиться

Я использую это решение:

preg_match_all( '/<((?!<)(.|\n))*?\>/si',  $content, $new);
var_dump($new);
0
ответ дан T.Todua 4 September 2018 в 08:32
поделиться
<pre>([\r\n\s]*(?!<\w+.*[\/]*>).*[\r\n\s]*|\s*[\r\n\s]*)<code\s+(?:class="(\w+|\w+\s*.+)")>(((?!<\/code>)[\s\S])*)<\/code>[\r\n\s]*((?!<\w+.*[\/]*>).*|\s*)[\r\n\s]*<\/pre>
-3
ответ дан user5988518 4 September 2018 в 08:32
поделиться

Тег может быть завершен в другой строке. Вот почему \n необходимо добавить.

<PRE>(.|\n)*?<\/PRE>
97
ответ дан Vikas 4 September 2018 в 08:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: