регулярное выражение: не совпадают после символа - PullRequest
0 голосов
/ 14 марта 2020

У меня есть это регулярное выражение:

(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))

Это преобразует

word word1 https://sub.example.org/file/track?arg=par word

в

https://sub.example.org/file/track?arg=par

желаемый результат:

https://sub.example.org/file/track

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

Ответы [ 5 ]

0 голосов
/ 14 марта 2020

Можно сопоставить следующее регулярное выражение:

http[^\?]+
  • [^\?]+ -> будет соответствовать всем, кроме "?"

enter image description here

0 голосов
/ 14 марта 2020

Можно сопоставить следующее регулярное выражение:

https:.*(?=\?)(?!=.+\?)

Демонстрация

Это регулярное выражение PCRE (PHP) выполняет следующие операции:

https:     # Match string
.*         # Match 0+ chars
(?=\?)     # Use a positive lookahead to match a following '?'
(?!=.+\?)  # Use a negative lookahead to avoid matching '?' after 1+ chars

Отрицательный взгляд необходим в том случае, если имя каталога или файла содержит знак вопроса. (Напомним, что, хотя Windows не разрешает именам файлов содержать знаки вопроса, Unix / OSX / Linux делает.)

Например, в строке были

word word1 https://sub.example?.org/file/track?arg=par word

это регулярное выражение будет соответствовать

https://sub.example?.org/file/track
0 голосов
/ 14 марта 2020

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

Search: ".* (.*)\?.*"
Replace: "$1"
0 голосов
/ 14 марта 2020

Я предлагаю использовать

"(https:[^ ]*)"

и заменять на

"$1"

Регулярное выражение https:[^ ]* говорит: «Найдите подстроку, которая начинается с« https: »и сопровождается ноль или более символов, которые НЕ пробел ". Круглые скобки вокруг регулярного выражения гласят: «Обработайте все внутри этих скобок как« группу соответствия »». Строка замены «$ 1» говорит: «Замените все на группу совпадений # 1», или, другими словами, на все, что в скобках, что в данном случае представляет собой все в исходной строке, которое соответствует регулярному выражению. См. Этот пример regex101 .

Конструкция [^x], где x - это символ, который НЕ должен появляться в сопоставленных данных, является очень распространенной конструкцией в регулярных выражениях, и IMO это тот, который вы должны помнить и использовать.

0 голосов
/ 14 марта 2020

Только с одним примером для работы:

^.* (https?:\/\/.*?)\?.*$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...