Зачем Textpad спрашивать, хотите ли вы использовать синтаксис регулярных выражений POSIX? - PullRequest
3 голосов
/ 17 июля 2009

Мне нужно выделить кучу URL-адресов изображений из документа, в котором изображения связаны с такими именами:

bellpepper = "http://images.com/bellpepper.jpg"
cabbage = "http://images.com/cabbage.jpg"
lettuce = "http://images.com/lettuce.jpg"
pumpkin = "http://images.com/pumpkin.jpg"

Я хочу удалить из файла весь текст, кроме URL-адресов, удалив имя переменной, знак равенства и двойные кавычки, поэтому у меня есть новый файл, представляющий собой просто список URL-адресов, по одному на строку.

Я пытался различными способами идентифицировать данные, не относящиеся к URL, с использованием регулярных выражений в Textpad, установив флажок «Регулярное выражение» в диалоговом окне «Найти», но Textpad, похоже, не нравится их.

Под

Configure->Preferences->Editor

есть опция:

"Use POSIX regular expression syntax"

В отличие от чего?

Возможно ли, что мои проблемы с выполнением этой операции регулярного выражения связаны с каким-то изюминкой реализации регулярного выражения в Textpad?

Ответы [ 3 ]

4 голосов
/ 17 июля 2009

Альтернатива POSIX отличается от стандартной для TextPad. Из справки поиска / замены:

Регулярные выражения TextPad основаны на стандарте POSIX P1003.2, но синтаксис может быть синтаксисом POSIX или расширенных регулярных выражений UNIX (по умолчанию).

, чтобы выполнить работу в TextPad, используйте следующее:

Find in: ^[^"]*"\([^"]*\)"
Replace with: \1

редактировать:

чтобы разбить выражение:

^ - start of line
[^"]* - in a set the caret ^ is for negation, 
        so a greedy match of anything that is not a "
        in this case, everything up to the first quote
" - the first quote per line in your source text
\(...\) - puts together a group that can be referenced later
[^"]* - same explanation as above, this time matching the url in question
" - the last quote on the line

Кроме того, просматривая справочный документ по Regex в TextPad, вы увидите диаграмму юридических выражений, в которой перечислены версии «по умолчанию» и «POSIX» рядом. Единственное отличие, по-видимому, состоит в том, что в значении Default по умолчанию используется экранирование парней () и проклятий Occurance {}, а в версии POSIX - отсутствие экранирования.

Имея это в виду, чтобы выполнить работу в TextPad с включенной опцией 'использовать синтаксис регулярного выражения POSIX', замените приведенное выше выражение Find in следующим:

Find in: ^[^"]*"([^"]*)"
3 голосов
/ 17 июля 2009

Помимо POSIX есть также регулярные выражения в стиле Perl .

2 голосов
/ 17 июля 2009

Оригинальные базовые регулярные выражения, такие как «sed», имеют некоторые отличия от того, что мы чаще всего используем. Например, вы используете \( и \) для обозначения групп вместо (и), а модификатор «+» отсутствует.

Кроме того, я отмечаю по связанному вопросу, что ваше "*" находится вне скобок, а не внутри. Это означает, что в первой группе будет сопоставлен только один символ.

...