Как я могу исправить это RegEx? - PullRequest
0 голосов
/ 05 февраля 2020

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

/(url:\/\/.*\/.*\/.*[^:",])/

для соответствия URL, как это:

"url://address/abc/v1/folders/-K5da6uPz7OTMQrRPjQ6yALXXC1whG08BTgX5adQsLY"

Однако, если у меня есть два из этих URL, как это:

"url://address/abc/v1/folders/-123456789": "url://address/abc/v1/folders/-987654321"

RegEx распознает их как единое целое и не разделяет их.

Как я могу написать RegEx, что он разделяет их как единое целое и что он все еще работает, если они не находятся рядом друг с другом?

Спасибо!

Ответы [ 6 ]

1 голос
/ 05 февраля 2020

Вы можете использовать повтор совпадения для прямого слэ sh с последующим сопоставлением любого символа, кроме прямого слэ sh или пробела, чтобы предотвратить совпадение.

url:\/\/[^\/]+(?:\/[^\/\s]+)+\/[^\s:"]+
  • url:\/\/ Match ur://
  • [^\/]+ Совпадение 1+ раз с любым символом, кроме /
  • (?:\/[^\/\s]+)+ Повторение 1+ раз сопоставления / и 1+ раз с любым символом, кроме /
  • \/[^\s:"]+ Соответствует последнему / и использует класс символов, исключая любой из перечисленных символов

Regex demo

Если один forward sla sh также можно сопоставить, вы можете использовать * вместо + в качестве квантификатора для группы:

url:\/\/[^\/]+(?:\/[^\/\s]+)*\/[^\s:"]+
0 голосов
/ 05 февраля 2020

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

(url:\/\/[^ ":]*)

  • url:\/\/ соответствует url://
  • [^ ":]* соответствует 0 или более символам, которые не являются пробелами, ':' или '"'
0 голосов
/ 05 февраля 2020

Разве вы не пропустили один "/.*" в своем выражении (?) Я имею в виду ... у вас есть 4 раздела, но это регулярное выражение соответствует только 3 подразделам. Есть предварительный просмотр вашего регулярного выражения

0 голосов
/ 05 февраля 2020

Это будет работать, если вы хотите, чтобы цитаты были включены

("url:\/\/[\S]+")

без

(url:\/\/[a-zA-z\d\/-]+)
0 голосов
/ 05 февраля 2020

попробуйте этот шаблон

(url:\/\/([a-zA-Z0-9]+)\/([a-zA-Z0-9]+)\/([a-zA-Z0-9]+)\/([a-zA-Z0-9]+)\/([a-zA-Z0-9-]+))

Вот вам пример того, как это работает

https://regex101.com/r/NQxKIc/2

0 голосов
/ 05 февраля 2020

Вы можете использовать функцию split() и сохранить полученные строки в массиве. Затем вы повторяете и проверяете каждый элемент на соответствие вашему RegEx

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