关于正则表达式:对于字符前未转义的反斜杠,正确的正则表达式是什么?

关于正则表达式:对于字符前未转义的反斜杠,正确的正则表达式是什么?

What is the proper regular expression for an unescaped backslash before a character?

假设我要代表\q(或任何其他特定的"反斜杠转义字符")。 也就是说,我要匹配\q而不匹配\\q,因为后者是一个反斜杠转义的反斜杠,后跟一个q。 但是\\\q会匹配,因为它是一个反斜杠转义的反斜杠,后跟一个反斜杠转义的q。 (好吧,它会与结尾处的\q匹配,而不与开头的\\匹配。)

我知道我需要一个反面的眼神,但它们总是使我的头纠结,尤其是因为反斜杠本身必须在正则表达式中转义。


更新:
我新改进的Perl正则表达式,支持3个以上的反斜杠:

1
2
3
4
/(?<!\\)    # Not preceded by a single backslash
  (?>\\\\)* # an even number of backslashes
  \\q       # Followed by a \q
  /x;

或者您的正则表达式库不支持扩展语法。

1
/(?<!\\)(?>\\\\)*\\q/

我的测试程序的输出:

1
2
3
4
5
6
q does not match
\q does match
\\q does not match
\\\q does match
\\\\q does not match
\\\\\q does match

旧版

1
/(?:(?<!\\)|(?<=\\\\))\\q/

Leon Timmermans正是我想要的。对于以后来这里的人,我将做一个小改进:

1
/(?<!\\)(?:\\\\)*\\q/

(\\\\)组开头的附加?:使其不保存到任何匹配数据中。我无法想象要保存该文本的情况。


现在您有两个问题。

只需编写一个简单的解析器。如果正则表达式现在使您的头陷入困境,请等待一个月。


最好的解决方案是执行自己的字符串解析,因为正则表达式并不真正支持您要尝试执行的操作。 (rep @Frank Krueger,如果您采用这种方式,我只是在重复他的建议)

但是,我确实在排除正则表达式上开了一枪。这将匹配所有不符合您的条件的""后跟一个字符的字符串。

1
(?:[\\][\\])(?!(([\\](?![\\])[a-zA-Z])))


推荐阅读

    字符串查找命令linux?

    字符串查找命令linux?,系统,字符串,工具,信息,文件,命令,字符,选项,文本,范

    linux命令替换字符串?

    linux命令替换字符串?,字符串,文件,批量,首次,数据,命令,内容,方法,用字,结

    linux命令中转义字符?

    linux命令中转义字符?,标准,本行,密码,字符,电脑,系统,环境,数据,命令,终端,l

    linux命令行字符颜色?

    linux命令行字符颜色?,系统,地址,代码,信息,数字,软件,通用,电脑,颜色,命令,l

    linux彩色字符命令?

    linux彩色字符命令?,数字,颜色,命令,字符,文字,终端,控制台,环境变量,白色,

    linux中替换字符命令?

    linux中替换字符命令?,工作,地址,系统,命令,资料,数据,信息,商业,管理,目录,L

    linux拼接字符串命令?

    linux拼接字符串命令?,系统,工作,代码,工具,名称,信息,地址,时间,数据,命令,l

    linux图形转字符命令?

    linux图形转字符命令?,系统,电脑,密码,界面,情况,地方,工具,图形界面,字符,

    linux隐藏字符的命令?

    linux隐藏字符的命令?,工作,地址,系统,发行,信息,标准,管理,命令,目录,文件,

    linux命令行最大字符?

    linux命令行最大字符?,系统,工作,数字,地址,等级,设备,软件,信息,标准,设计,l

    添加字符串命令linux?

    添加字符串命令linux?,情况,名称,文件,位置,名字,地方,连续,信息,命令,内容,L

    linux命令行大字符?

    linux命令行大字符?,工作,地址,系统,信息,管理,第一,发行,在线,最新,标准,lin

    linux命令空格转义?

    linux命令空格转义?,系统,密码,名称,管理,数据,标准,电脑,空格,命令,终端,lin

    linux命令查找字符串?

    linux命令查找字符串?,工具,信息,命令,字符串,系统,工作,文件,范本,样式,文

    linux命令字符搜索?

    linux命令字符搜索?,系统,工具,命令,灵活,信息,工作,字符串,文本,文件,模式,l

    linux大写字符命令?

    linux大写字符命令?,系统,工作,信息,档案,数字,地址,命令,名称,密码,时间,lin

    linux字符匹配命令?

    linux字符匹配命令?,工作,地址,管理,系统,工具,标准,命令,目录,信息,文件,Lin

    linux字符替换命令?

    linux字符替换命令?,系统,数据,软件,字符串,文件,命令,实时,首次,位置,工作,l

    linux删除字符的命令?

    linux删除字符的命令?,系统,软件,名称,文件,档案,不了,命令,字符,目录,字母,l

    linux命令正则表达式?

    linux命令正则表达式?,工作,环境,基础,网络,单位,名称,平台,信息,正规,管理,L