正则表达式仅匹配行首的字符[关闭]


73

我正在尝试处理正则表达式。我有一个包含几个字段的大型机文件。我有一个平面文件解析器,它基于每行的前三个字母来区分几种记录类型。如何编写前三个字母为“ CTR”的正则表达式。


32
应该希望您可以在5年后选择答案。
MECU

3
这个问题不应该被解决,因为它从来没有像现在这样广泛。
蒂莫·霍维宁

Answers:


105

行的开头还是字符串的开头?

字符串的开始和结束

/^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=支持多行模式,这组正则表达式来对待每行一个字符串,所以^$会匹配开始和行结束” -值得强调的,我想。我以为只要输入^&就可以了$。不是这样!和快乐
100。–鲁芬

19
^CTR

要么

^CTR.*

编辑:

更清楚地说...^CTR将匹配行首和那些字符...如果您只想匹配一行本身(并且已经有要使用的行),那么这就是您真正需要的(但是如果这是在这种情况下,最好使用预制substr()类型的函数...不知道您使用的是哪种语言...)。但是,如果你想匹配和抢行,你会需要像.*或者.*$还是取决于你使用的是什么语言/正则表达式的功能,无论...


。*会匹配点击率之后,行尾或字符串末尾的所有内容,具体取决于您使用的是哪种语言
Crayon Violent

13

正则表达式符号以匹配行的开头:

^

添加您要搜索的字符串(CTR像这样)添加到正则表达式中:

^CTR

例: 正则表达式

这样就足够了!

但是,如果您需要以所选语言从整行中获取文本,请添加“匹配任何内容”模式.*

^CTR.*

例: 更多正则表达式

如果您想发疯,请使用行匹配器

$

将其添加到不断增长的正则表达式模式中:

^CTR.*$

例: 让我们发疯

注意:根据使用正则表达式的方式和位置,可能必须使用多行修饰符才能使其与多行匹配。关于从文件中挑选行进行处理的最佳策略,可能会有一个完整的讨论,其中一些策略需要这样做:

多行标志 m(在各种语言/上下文中以各种方式指定)

/^CTR.*/gm

示例:我们必须在regex101上使用m


8

试试看^CTR.\*,从字面上看意味着线的开始,点击率等等

这将区分大小写,并且设置非区分大小写将取决于您的编程语言,或者^[Cc][Tt][Rr].\*在跨环境区分大小写很重要时使用。



2

不确定如何将其应用于服务器上的文件,但是通常,与字符串开头匹配的正则表达式为:

^CTR


^方法开始串/线


1
(?i)^ [\ r \ n] *点击率

(?i)-不区分大小写-如果区分大小写则删除。
[\ r \ n]-忽略空格和换行
*-0次或多次相同
点击率-您从字符串开头。


1

这个问题存在歧义。

您输入的字符串是什么?是整个文件吗?还是一次只有1行?一些答案假设是后者。我想回答前者。

您想从正则表达式中得到什么?您想要对是否进行匹配的判断是/否的事实?还是要提取以CTR开头的整行?我会回答你只想要一个真/假匹配。

为此,我们只需要确定CTR是在文件开头还是紧随新行之后发生。

/(?:^|\n)CTR/
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.