RegEx для сопоставления списка символов между двумя числами - PullRequest
2 голосов
/ 28 апреля 2019

При импорте в интернет-магазин в описании товара мне нужно убрать некоторые теги. Они между числами.

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

Как убрать лишние теги, поставить с ним тире?

Числа могут быть разными.

1009 * Покушение * [0-9](.*)[0-9] Input

 13</li></ul></div><div><p>20 kg

Выход:

 13-20 kg

Ответы [ 3 ]

1 голос
/ 28 апреля 2019

Этот RegEx может помочь вам захватить ваш целевой вывод:

([0-9]+)([A-Za-z\<\>\/\\]+)([0-9]+)

enter image description here

Вы можете просто вызвать его, используя $ 2 , который является второй группой захвата, и она может захватить желаемый результат.

Вы можете еще больше упростить его, если хотите, или добавить дополнительные границы, если это необходимо.

Если вы хотите отфильтровать HTML, RegEx, возможно, не лучшая идея для этого. Однако, если вы хотите попрактиковаться, вы можете подумать об использовании / обновлении выражения, возможно, похожего на this RegEx :

([0-9]+)([A-Za-z\<\>\/\\]+)([0-9]+\skg)

Есть три группы захвата, просто для простоты использования, где желаемая цель - \ 1- \ 3 или \ 1- \ 3 . Вы можете добавить другой специфичный для языка символ или экранировать, если хотите.

enter image description here

1 голос
/ 28 апреля 2019

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

(\d+)\D+(\d+)

и замените его на \1-\2

. Это в основном начнет захват образцов с одной или несколькими цифрами, используя (\d+), и захватит их в group1, а затем будет соответствоватьодна или несколько не цифр, использующих \D+, и не будут захватывать их ни в какие группы, чтобы исключить их во время замены, и, наконец, снова будут захватывать одну или несколько цифр, используя (\d+), и захватывать в группе 2 и заменять все совпадения на \1-\2 (или $1-$2 согласно вашему вкусу регулярных выражений) сохранит числа и поместит между ними просто дефис.

Демонстрация регулярных выражений

1 голос
/ 28 апреля 2019

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

$str = "13</li></ul></div><div><p>20 kg";

echo $res = preg_replace('/^([0-9]+)[^0-9]+([0-9]+[a-z ]+)$/', '\1-\2', $str);

\1 и \2 являются обратными ссылками групп захвата () ([0-9]+) и ([0-9]+[a-z ]+)

Но убедитесь, что строка соответствует шаблону, который вы опубликовали, потому что, например, abc 13</li></ul></div><div><p>20 kg не будет работать с этим шаблоном.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...