Сложный шаблон регулярных выражений, не распознающий пробелы?

#regex

#регулярное выражение

Вопрос:

У меня есть шаблон регулярных выражений, который примерно в 50% случаев фиксирует то, что я хочу, я обнаружил, что случаи, когда он не соответствует, связаны с пробелами в строке. Кстати, это с регулярным выражением javascript.

ШАБЛОН РЕГУЛЯРНЫХ ВЫРАЖЕНИЙ:

/[url="https?://([a-z0-9-] .)*cnn.com/newsreel/showreel.php?id=?([^s]*[^.])?"]([^s]*[^.])[/url]/gi

СТРОКИ ДЛЯ СОПОСТАВЛЕНИЯ

А) [url="http://www.cnn.com/newsreel/showreel.php?id=977976"]Test123[/url]

Б) [url="http://www.cnn.com/newsreel/showreel.php?id=977976"]Test 1 2 3[/url]

Теперь, если я попытаюсь запустить этот шаблон на A, он работает нормально. Но на B он терпит неудачу из-за всех пробелов.

Я думаю, это связано с моей 3-й группой сопоставления ([^s]*[^.]) , которая, я думаю, не улавливает пробелы. У кого-нибудь есть идеи, как я могу заставить его также совпадать с пробелами?

Спасибо!

Ответ №1:

Измените свою 3-ю группу соответствия с

 ([^s]*[^.])
  

Для

 (.*[^.])
  

Т.е. Вы заменяете [^s]* (ноль или более символов, не содержащих пробелов) на .* (ноль или более символов).

Обратите внимание, что это также позволит использовать другие символы пробела, такие как табуляции и, возможно, новые строки, в зависимости от того, как используется регулярное выражение. Если это слишком мягко, вы можете выбрать [S ]* (ноль или более символов без пробелов или обычных пробелов).

Комментарии:

1. На самом деле я столкнулся с проблемой при дополнительном тестировании, когда он захватывает дополнительные символы. Как бы я использовал ваше другое предложение [S ]* ?

2. Используйте ([S ]*[^.]) для третьей группы соответствия.

3. Итак, что происходит сейчас, если я создаю свою строку: [url="http://www.cnn.com/newsreel/showreel.php?id=977976"]Test 1 2 3[/url] [url="http://www.cnn.com/newsreel/showreel.php?id=977976"]Test 1 2 3[/url] Он соответствует всей строке как 1 единице. Таким образом, 2 схемы спина к спине [url] рассматриваются как одна

4. Также с моим вторым предложением? Не должен.

5. Да, для меня со вторым предложением он по-прежнему воспринимает их как одну гигантскую схему URL