0

我正在尝试使用正则表达式来查找和替换文档文件夹中的一些文本。我的问题是,当文本在同一行中出现两次时,正则表达式通过从第一个开始到第二个结束一起运行两个表达式来“找到”匹配项。

这是我对正则表达式的尝试:

\\x.*\\x\*

我要匹配的文本以 \x 开头,以 \x* 结尾。

第一个示例包含一个匹配项:

2Y Sara concibió \xa \xo 21.2: \xt Heb 11.11.\x* y le dio un hijo a Abrahán en su vejez, en el tiempo preciso que Dios le había anunciado。

第二个示例包含两个匹配项,但它们由正则表达式一起运行:

2Los creó hombre y mujer, \xa \xo 5.2: \xt Mt 19.4; Mc 10.6.\x* y los bentijo.\xb \xo 5.1-2: \xt Gn 1.27-28.\x* El día en que fueron creados les puso por nombre Adán。

由于诸如此类的挫折,我从未精通正则表达式……听起来总是个好主意。但我正在努力学习!

4

1 回答 1

2

您的.*匹配星号也是如此。默认情况下,正则表达式是贪婪的:它们匹配尽可能多的字符,然后向后继续直到匹配成功。

一种选择是在后面.*加上问号,创建.*?. 此语法坚持匹配是non-greedy,因此它匹配尽可能少的字符。?Perl、ECMA、Java 和除 POSIX/GNU 实现之外的大多数其他实现中的尾随语法兼容。即像这样:

\\x.*?\\x\*

您的替代方法是匹配除星号以外的所有字符,在正则表达式中看起来像[^*]*. 但是,这将阻止您匹配字符串中的任何星号,即使是那些前面没有反斜杠的星号。

(感谢 lxop 指出勘误表!)

于 2013-01-16T22:28:59.587 回答