Regex для удаления определенных переменных числовых значений из некоторого текста
-
25-09-2019 - |
Вопрос
Я хочу заменить все 4 экземпляра номер 300 из кода ниже (на котором пользователи мои сайта будут вставлены всякий раз, когда они создают новый пост блога), с 470.
<div>
<object width="300" height="300">
<embed src="link-removed" width="300" height="300"></embed>
</object>
<p>
<a href="another-link">link</a>
</p>
</div>
Ширина и высота вставленного кода, не всегда могут быть 300 на 300.
Итак, я полагаю, что мне, вероятно, нужно регулярное выражение, которое Subs какое-либо числовое значение, которое следует за строками «ширина =» и «высота =», вспомнив, что вспоминает, чтобы учесть расчеты, которые окружают число. Кто-нибудь может сказать мне, если это лучший способ, и если да, то, что было бы лучшим регелем?
В случае, если это имеет значение, вставленный код хранится как «текст» в БД, а не как строку, так как это довольно длинно (я снял несколько сотен символов из того, что вы видите вставлены здесь) ...
Решение
Ты можешь найти (width|height)="\d+"
и заменить его с $1="470"
. Отказ Это тоже захватывает width
или height
в группу 1, а в замену строк вы обратитесь к этой захваченной строке как $1
.
Шаблон может стать более сложным в зависимости от требования. Если вы хотите быть либералом с пробелами, вы можете позволить \s*
вокруг =
; Чтобы предотвратить сопоставление, скажем, tablewidth="300"
, вы можете предшествовать образению с \b
, так далее.
Смотрите также
На захватывающих группах
То (...)
Конструкция - это то, что называется «захват группой».
Учитывая эту тестовую строку:
i have 35 dogs, 16 cats and 10 elephants
потом (\d+) (cats|dogs)
Урожайность 2 результатов матча (Смотри на rubular.com.)
- Результат 1:
35 dogs
- Группа 1 захватывает
35
- Группа 2 захватывает
dogs
- Группа 1 захватывает
- Результат 2:
16 cats
- Группа 1 захватывает
16
- Группа 2 захватывает
cats
- Группа 1 захватывает
использованная литература
В рубина
В замену строк рубин использует \
вместо $
как SIGIL для обратных условий для захвата групп.
RUBY-DOC.ORG -
String#gsub
: Если строка используется в качестве замены, специальные переменные из матча (например,$&
а также$1
) Не может быть заменено в него, так как замена в строку происходит до начала матча шаблона. Тем не менее, последовательности\1
,\2
, И так далее может использоваться для интерполяции последовательных групп в матче.
Таким образом, решение, которое вы ищете, это что-то подобное:
text = 'blah blah width="300" and height="299" more blah'
puts text.gsub(/(width|height)="\d+"/, '\1="470"')
Это отпечатки (Как видно на IDeone.com):
blah blah width="470" and height="470" more blah