我正在尝试处理正则表达式。我有一个包含几个字段的大型机文件。我有一个平面文件解析器,它基于每行的前三个字母来区分几种记录类型。如何编写前三个字母为“ CTR”的正则表达式。
Answers:
行的开头还是字符串的开头?
/^CTR.*$/
/
=分隔符
^
=字符串开头
CTR
=文字CTR
$
=字符串结尾
.*
=零个或多个除换行符以外的任何字符
/^CTR.*$/m
/
=定界符
^
=起始线
CTR
=字面CTR
$
=行结束
.*
=零或多个任意字符除了换行符
m
=启用多行模式中,该套正则表达式来对待每行一个字符串,所以^
和$
将匹配开始和行末
在多行模式下,您仍然可以使用\A\Z
永久锚来匹配字符串的开头和结尾
/\ACTR.*\Z/m
\A
=表示字符串的开头
CTR
=文字CTR
.*
=零个或多个字符,除了换行符
\Z
=字符串的结尾
m
=启用多行模式
这样,匹配行首的另一种方法是这样的:
/(\A|\r|\n|\r\n)CTR.*/
要么
/(^|\r|\n|\r\n)CTR.*/
\r
=回车/旧Mac OS换行符
\n
=换行/ Unix / Mac OS X换行符
\r\n
= Windows换行符
注意,如果要\
在支持转义的某些程序字符串中使用反斜杠,例如php双引号,""
则需要先将其转义
因此运行时,\r\nCTR.*
您可以将其用作"\\r\\nCTR.*"
m
=支持多行模式,这组正则表达式来对待每行一个字符串,所以^
并$
会匹配开始和行结束” -值得强调的,我想。我以为只要输入^
&就可以了$
。不是这样!和快乐
^CTR
要么
^CTR.*
编辑:
更清楚地说...^CTR
将匹配行首和那些字符...如果您只想匹配一行本身(并且已经有要使用的行),那么这就是您真正需要的(但是如果这是在这种情况下,最好使用预制substr()
类型的函数...不知道您使用的是哪种语言...)。但是,如果你想匹配和抢行,你会需要像.*
或者.*$
还是取决于你使用的是什么语言/正则表达式的功能,无论...
^
添加您要搜索的字符串(CTR
像这样)添加到正则表达式中:
^CTR
例: 正则表达式
这样就足够了!
但是,如果您需要以所选语言从整行中获取文本,请添加“匹配任何内容”模式.*
:
^CTR.*
例: 更多正则表达式
如果您想发疯,请使用行末匹配器
$
将其添加到不断增长的正则表达式模式中:
^CTR.*$
例: 让我们发疯
注意:根据使用正则表达式的方式和位置,可能必须使用多行修饰符才能使其与多行匹配。关于从文件中挑选行进行处理的最佳策略,可能会有一个完整的讨论,其中一些策略需要这样做:
多行标志 m
(在各种语言/上下文中以各种方式指定)
/^CTR.*/gm