我有一些看起来像这样的数据
john, dave, chris
rick, sam, bob
joe, milt, paul
我正在使用此正则表达式来匹配名称
/(\w.+?)(\r\n|\n|,)/
大部分情况下有效,但是文件在最后一个单词之后突然结束,这意味着最后一个值不以结束\r\n
,\n
或者,
以EOF结尾。有没有办法在正则表达式中匹配EOF,这样我就可以在第二个分组中正确设置了吗?
我有一些看起来像这样的数据
john, dave, chris
rick, sam, bob
joe, milt, paul
我正在使用此正则表达式来匹配名称
/(\w.+?)(\r\n|\n|,)/
大部分情况下有效,但是文件在最后一个单词之后突然结束,这意味着最后一个值不以结束\r\n
,\n
或者,
以EOF结尾。有没有办法在正则表达式中匹配EOF,这样我就可以在第二个分组中正确设置了吗?
Answers:
这个问题的答案\Z
花了我一段时间才能解决,但现在可以了。请注意,相反地,\A
匹配整个字符串的开头(与^
并$
匹配一行的开头)。
(\s*)\?>(\s*)\Z
...在这里进行了更多挖掘之后,这将适用于项目文件夹:(\s*)\?>(\s*)(\n*)(\W)\Z
仅供参考:这是用文件末尾的换行符替换所有关闭的php标记。
\A
也可以在Visual Studio中查找和替换。一如往常谨慎地使用这些东西,但是一旦我感到高兴,它实际上省去了很多麻烦,实际上它会做正确的事。
在Visual Studio中,您可以这样找到EOF :$(?![\r\n])
。无论您的行尾是CR,CRLF还是仅LF,这都有效。
另外,您可以确保所有代码文件都具有最终的换行符,如下所示:
Find What: (?<![\r\n])$(?![\r\n])
Replace With: \r\n
Use Regular Expressions: checked
Look at these file types: *.cs, *.cshtml, *.js
工作原理:
查找不以CR或LF开头且也不以CR或LF开头的任何行尾(零宽度匹配)。一些想法会告诉您为什么这样做!
请注意,您应该使用所需的行尾字符替换,例如CR,LF或CRLF。
将Ryan建议的\ Z与\ z的行为进行对比:
$ perl -we'my $ corpus =“ hello \ n”; $ corpus =〜s / \ Z / world / g; print(“:$ corpus:\ n”)' :你好,世界 世界: $ perl -we'my $ corpus =“ hello \ n”; $ corpus =〜s / \ z / world / g; print(“:$ corpus:\ n”)' :你好 世界: $
perlre sez:
\ Z仅在字符串末尾或末尾换行符之前匹配 \ z仅在字符串末尾匹配
将测试用例转换为Ruby(1.8.7,1.9.2)的行为相同。
也许尝试用$(EOL / EOF)代替(\ r \ n | \ n)?
/\"(.+?)\".+?(\w.+?)$/