我正在尝试移除一堆SGF文件中的所有注释,并想出了以下Perl命令:
perl -pi -e 's/P?C\[(?:[^\]\\]++|\\.)*+\]//gm' *.sgf
我正在尝试匹配并删除一个C或PC后跟一个左括号,然后是不是右括号的字符(如果它们是的话,必须用\
转义),然后是右括号。
我正在尝试匹配以下示例:
C[HelloBot9 [-\]: GTP引擎用于HelloBot9(白色):HelloBot版本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[其他内容\]]
C[内容\]
PC[内容\\\]
该正则表达式在几个在线正则表达式测试工具中(包括一些声称它们是Perl正则表达式测试工具的工具)都有效,但由于某种原因,在命令行上无法正常工作。希望得到帮助。
/m
修饰符是无用的,因为您没有使用任何^
或$
锚点,请参见perlre。 - ThisSuitIsBlackNotC[...]
中间有一个换行符,如果是这样的话,我会参考这个问题。 - ThisSuitIsBlackNotperl -0777pi -e
并且它起作用了吗?另外,一个稍微优化的模式看起来像是s/P?C\[[^]\\]*(?:\\.[^]\\]*+)*]//sg
(如果换行符不能被转义,在这种情况下甚至不需要s
修饰符)。 - Wiktor Stribiżew