Я пытаюсь удалить все комментарии в кучу SGF файлов, и придумали следующую команду: PERLPerl не соответствует регулярному выражению?
perl -pi -e 's/P?C\[(?:[^\]\\]++|\\.)*+\]//gm' *.sgf
Я пытаюсь соответствовать и удалить C или ПК с последующим слева, а затем символы, которые не являются правильными скобками (если они должны быть экранированы с помощью \
), а затем правой скобки.
Я пытаюсь соответствовать следующие примеры:
C[HelloBot9 [-\]: GTP Engine for HelloBot9 (white): HelloBot version 0.6.26.08]
PC[IA [-\]: GTP Engine for IA (black): GNU Go version 3.7.11
]
C[person [-\]: \\\]]
C[AyaMC [3k\]: GTP Engine for AyaMC (black): Aya version 6.61 : If you pass, AyaMC
will pass. When AyaMC does not, please remove all dead stones.]
и некоторые примеры, которые не должны быть совпавшие:
XYZ[Other stuff \]]
C[stuff\]
PC[stuff\\\]
Регулярное выражение работает в нескольких интернет-тестеров регулярных выражений (в том числе несколько, которые они состоянии Perl тестеры регулярных выражений), но по какой-то причине не работает в командной строке. Помощь приветствуется.
Онлайн-тестеры регулярных выражений Я видел, что все используют PCRE, а не Perl-регулярное выражение, поэтому результаты не будут отображаться n возможно, будут одинаковыми. Кроме того, модификатор '/ m' бесполезен, потому что вы не используете никаких якорей'^'или' $ '; см. [perlre] (http://perldoc.perl.org/perlre.html#*m*). – ThisSuitIsBlackNot
@ThisSuitIsBlackNot А, это имеет больше смысла. Я до сих пор не знаю, как это сделать. – eukaryote
Когда я запускаю ваш код в первом наборе примеров, он работает. Можете ли вы создать [mcve]? – ThisSuitIsBlackNot