Инвертировать совпадение с RegExp - PullRequest
0 голосов
/ 25 августа 2010

Я сейчас работаю над конвейером в Yahoo!Трубы.Я получил RegExp, чтобы соответствовать URL.Теперь мне нужно сопоставить непревзойденный, чтобы удалить его, чтобы был только мой URL.Мой RegExp:

[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+

Как инвертировать соответствие?(Это должно быть сделано через другой RegExp, YPipes не поддерживает никакой другой способ.)

edit: Для пояснения: я получил строку и мне нужно получить первый URL внутри нее.Вот почему больше ничего не работает ...

1 Ответ

0 голосов
/ 26 августа 2010

Yahoo Pipes поддерживает замену регулярных выражений (используйте модуль строковых регулярных выражений).

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

([A-Za-z]+://[A-Za-z0-9_-]+\.[A-Za-z0-9_:%&?/.=-]+)
^          ^            ^
|          |            |
|          |            + lone dashes always at the end of the character class!
|          +--- forward slashes do not need to be escaped             
+--- capturing group 1, contents later accessible through $1

, а затем замена всей строки содержимым этой группы.Просто введите $1 в поле «заменить на».Фактически это удаляет все, что вы не хотели хранить.

Поскольку я не уверен, что на самом деле должно делать ваше регулярное выражение, я не могу дать вам лучшую версию.

Как общий совет:Regex всегда и только о соответствует материалу, и никогда не о не соответствует (т.е. «исключает») материал.Есть регулярные выражения, которые имеют исключающий эффект, но даже они достигают его путем сопоставления.

...