У меня есть фрагменты строк в квадратных скобках, например:
[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;
Я просто замечаю, что если до и после шаблона текста / метки стоит], то у этой скобки нет. Я делаю нечто подобное и для других. Но я полагаю, что это невероятно необычно. Мое регулярное выражение не очень хорошее!