#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