Regex для удаления определенных переменных числовых значений из некоторого текста

StackOverflow https://stackoverflow.com/questions/3005347

  •  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
  • Результат 2: 16 cats
    • Группа 1 захватывает 16
    • Группа 2 захватывает cats

использованная литература


В рубина

В замену строк рубин использует \ вместо $ как 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top