我正在使用 TeXworks (Version 0.4.5),最近接触了它的正则表达式 (regex) 功能。例如,我对语法高亮进行了一些调整,以便练习。
现在我要问的是:TeXworks 是否可能不支持后向回顾(?<= )
表达式?至少在“查找和替换”对话框中?因为当我尝试在那里使用正则表达式时,它就会被标记为“无效”。此外,TeXworks 手册没有列出后向查找,但它列出了前向查找表达式。
我想要解决的实际问题:
我想用 替换\verb+BLABLA+
。\emph{BLABLA}
我尝试搜索\+(?<=verb\+.*)
并将匹配项(应该是结束的+
)替换为}
。然后我会搜索verb\+
并将其替换为emph{
。
我偶然发现,大多数正则表达式不支持后置.*
或“.+”,这仍然没有解答上述问题。
其次,如果不通过后视,您将如何解决实际问题?
答案1
我从未听说过这个功能,尽管它听起来确实很有趣。我只会使用正则表达式。
正则表达式的实现各不相同。由于我不熟悉 TeXworks,我无法确切地说出应该使用哪种语法,但我将给出两个示例。
在 Kile 中,我将使用类似下面的方法进行查找:
\\verb\+([^\+]*)\+
替换:
\\emph\{\1\}
因为sed
我会用类似
s/\\verb\+\([^\+]*\)\+/\\emph{\1}/g
所以我会写类似
sed 's/\\verb\+\([^\+]*\)\+/\\emph{\1}/g' <filename.tex> > <filename-new.tex>
否则我会用
sed 's/\\verb\+\([^\+]*\)\+/\\emph{\1}/g' <filename.tex>
检查输出然后使用
sed -i 's/\\verb\+\([^\+]*\)\+/\\emph{\1}/g' <filename.tex>
执行替换。(-i
但是,不要在未先检查输出的情况下使用。与编辑器不同,除非使用版本控制,否则命令行没有“撤消”功能!)
Kile 中的()
和\(\)
中sed
的分组和保存模式的一部分。然后将其重新用于替换,\1
作为回溯到被替换的字符串的相应部分。
\
对原本会被解释为特殊字符而不是模式的一部分的内容进行转义。因此\\verb
,\\emph
和是、和\+
所必需的。\verb
\emph
+
[]
匹配指定的任意一个字符。例如,将匹配、或[abc]
中的任意一个。内部对此取反。因此匹配除 之外的任何字符。a
b
c
^
[^\+]
+
*
表示零个或多个某物。因此a*b
将匹配b
、ab
等等aab
。因此,[^\+]*
匹配任何不包含 的零个或多个字符的字符串+
。