выровнять строку по шаблону в perl?

У меня есть фрагменты строк в квадратных скобках, например:

[p1 text1/label1] [p2 text2/label2] [p3 text3/label3] [...

и так далее.

Неважно, что находится внутри каждого фрагмента. Но иногда встречаются отдельные фрагменты текста, НЕ заключенные в квадратные скобки. Например:

[p1 text1/label1] [p2 text2/label2] textX/labelX  [p3 text3/label3] [...] textY/labelY textZ/labelZ [...]

Я думал, что решил эту проблему с помощью регулярных выражений в perl, пока не понял, что обслуживаю только те случаи, когда есть один случайный текст в начале, середине или конце текста, но не там, где у нас могут быть два случайных случая вместе. (как фрагменты Y и Z выше).

Итак, я понял, что регулярные выражения в Perl улавливают только первый соответствующий шаблон? Как тогда может быть решена указанная выше проблема?

Изменить:

Проблема состоит в том, чтобы все были заключены в в квадратные скобки. Квадратные скобки никогда не рекурсивны. Если фраза заключена в квадратные скобки, p-значение зависит от значения «label». Например, если случайная фраза без скобок -

li/IN

, тогда она должна превратиться в:

[PP li/IN]

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

Я использовал разные регулярные выражения для каждой позиции (начало, середина и конец).Тот, который улавливает фразу без скобок посередине, выглядит так:

$data =~ s/\] (text)#\/label \[/\] \[selected-p-value $1#\/label\] \[/g;

Я просто замечаю, что если до и после шаблона текста / метки стоит], то у этой скобки нет. Я делаю нечто подобное и для других. Но я полагаю, что это невероятно необычно. Мое регулярное выражение не очень хорошее!

7
задан user961627 17 November 2011 в 14:23
поделиться