我正在尝试使用正则表达式查找和替换文档文件夹中的某些文本。我的问题是,当文本在同一行中出现两次时,正则表达式通过从第一行的开头到第二行的结尾一起运行两个表达式来“找到”匹配。
这是我对正则表达式的尝试:
\\x.*\\x\*
我想要匹配的文字以\ x开头,以\ x *。
结尾第一个例子包含一个匹配:
2YSaraconcibió \ x a \ xo 21.2:\ xt Heb 11.11。\ x * y le dio un hijoaAbrahánensu vejez,en el tiempo preciso que Dioslehabíaanunciado。
第二个示例包含两个匹配项,但它们由正则表达式一起运行:
2Loscreóhombrey mujer, \ x a \ xo 5.2:\ xt Mt 19.4; Mc 10.6。\ x * y los bendijo。\ x b \ xo 5.1-2:\ xt Gn 1.27-28。\ x * Eldíaenque fueron creados les puso pornombreAdán。
由于像这样的挫折,我从来没有精通正则表达式......总是听起来像个好主意。但我正在努力学习!
答案 0 :(得分:2)
您的.*
也会匹配星号。默认情况下,正则表达式是 greedy :它们匹配尽可能多的字符,然后向后继续直到匹配成功。
一种选择是在.*
后面加上问号,创建.*?
。此语法坚持认为匹配非贪婪,因此它匹配尽可能少的字符。尾随?
的语法在Perl,ECMA,Java和most other implementations aside from POSIX/GNU implementations中是兼容的。就像这样:
\\x.*?\\x\*
您的替代方法是匹配除星号之外的所有字符,正则表达式中的星号看起来像[^*]*
。但是,这会阻止您匹配字符串中的任何星号,即使是那些前面没有反斜杠的星号。
(感谢lxop注意勘误表!)