我尝试^(\[\^)([^\]\s\p{C}]+)(\])\ (\P{C}*(?:\n(?!\n[\[\n])\P{C}*)*)
在dar.lang(位于/usr/share/gtksourceview-3.0/language-specs
)中使用此 RegEx 来捕获具有多个段落的脚注(即 ia 以 2 个空行结束,即 3 \n
)。
当我打开 Gedit 时,我看到这个 RegExdar.lang
仅突出显示 [^1]... 脚注的第一段(忽略最后两个):
但是,当我在 Gedit 的“查找”对话框中使用相同的 RegEx(需要按下放大镜图标并激活“匹配为正则表达式”)时,它会完美匹配:
即使我在 RegEx 中替换两个出现的\P{C}*
with ,我也会得到相同的结果.......*
我应该如何更改dar.lang
,以便它也像 Gedit 的 Find 一样捕获具有多个段落的脚注?(regex101的行为与 Gedit 的“查找”对话框一样正确)。
更新:
看起来有人遇到了类似的问题。一个(可行的)建议是匹配空行^$
而不是\n
,因为 GtkSourceView 的语法引擎是基于行的(即“正则表达式一次只能访问一行文本”)。
但是我也看到人们说语法引擎使用 PCRE,一旦我运行syntax.dar
文件grep --perl-regexp
:
wget https://gitlab.com/pninim.org/dar/dar-syntax/-/raw/master/syntax.dar
grep --perl-regexp '^(\[\^)([^\]\s\p{C}]+)(\])\ (\P{C}*(?:\n(?!\n[\[\n])\P{C}*)*)' syntax.dar
我懂了:
[^a] Sentence of a long margin note's body that refers to the word "paragraph".
[^1] Sentence of the first paragraph of the footnote. Sentence of the first paragraph of the footnote. Sentence of the first paragraph of the footnote. Sentence of the first paragraph of the footnote.
[^b] Footnote at the end of the file. Footnote at the end of the file. Footnote at the end of the file.
所以另一方面,它看起来像标准的 PCRE 行为......