REGEX получает весь контент после серии специальных символов - PullRequest
0 голосов
/ 10 декабря 2018

Я использую это регулярное выражение, чтобы правильно получить значения для id и description

\$\$id=(\w+)(?:&description=(\w+))?\$\$

Пример здесь: https://regex101.com/r/GZVlKf/1

Я быизмените это регулярное выражение и получите любой текст после последнего $$.Я пробовал что-то вроде |?<=/$/$).*$, но безуспешно.Не могли бы вы указать мне правильное направление?

Данные испытаний:

$$id=uniq_id&description=some_description$$ Any text after
$$id=uniq_id$$ Any text after

$$id=uniq_id&description=some_description$$ Any text after

$$id=uniq_id$$ Any text after

Any text after

$$id=uniq_id&description=some_description$$ Any text after $$ dfjhdjfjkhjj $$


<input disabled="" type="checkbox"> Whatever
<input checked="" disabled="" type="checkbox"> Whatever
<input disabled="" type="checkbox"> $$id=uniq_id&amp;description=some_description$$ AX Whatever
<input checked="" disabled="" type="checkbox"> $$id=uniq_id$$ AX Whatever

<input disabled="" type="checkbox"> $$id=uniq_id&amp;description=some_description$$ AX Whatever

Ответы [ 3 ]

0 голосов
/ 10 декабря 2018

Вы можете использовать

/\$\$id=(\w+)(?:&amp;description=(\w+))?\$\$([^$]*(?:\$(?!\$)[^$]*)*$)?/

См. Демонстрационную версию regex .

Я добавил ([^$]*(?:\$(?!\$)[^$]*)*$)? в конце шаблона, который является необязательным совпадением для группы захвата

  • [^$]* - ноль или более символов, отличных от $
  • (?:\$(?!\$)[^$]*)* - ноль или более вхождений
    • \$(?!\$) - a $ не сопровождается другим $
    • [^$]* - ноль или более символов, отличных от $
  • $ - конец строки.
0 голосов
/ 10 декабря 2018

Вы можете попробовать это

\$\$id=(\w+)(?:&description=(\w+))?(?:.*)\$\$(.*)

Объяснение

  • \$\$id= - Совпадения $$id=.
  • (\w+) = Группа захвата.Соответствует одному или нескольким символам.
  • (?:&description=(\w+))? - Соответствует description=, за которым следует один или несколько символов (группа захвата).(? делает его необязательным).
  • (?:.*) Группа без захвата.Совпадает с любым нулем или большим временем, кроме новой строки. (Жадный режим)
  • \$\$ - Совпадает с последним $$.
  • (.*) Совпадает с любым значением, кроме нулевой строки или времени.

Демо

0 голосов
/ 10 декабря 2018

Я не уверен, правильно ли я понял ваш вопрос, но если так, то вы можете добавить .* в конце.Я думаю, что вы хотите что-то вроде этого:

\$\$id=(\w+)(?:&amp;description=(\w+))?\$\$(.*)
                          Here-------------^^^^

Это будет захватывать всю строку после того, как $$, пока не будет найдено \n.

Рабочая демонстрация

Если вы хотите захватить несколько строк, вы можете использовать:

\$\$id=(\w+)(?:&amp;description=(\w+))?\$\$([^$]*)

Рабочая демонстрация

Примечание: этот подход не будет совпадать, если в вашем тексте есть литерал $ после последнего $$.Если вы хотите захватить $, вы можете использовать комментарий Виктора.

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