正则表达式仅匹配行首的字符

Sai*_*and 57 regex

我正在努力研究正则表达式.我有一个有几个字段的大型机文件.我有一个平面文件解析器,它根据每行的前三个字母区分几种类型的记录.如何编写前三个字母为"CTR"的正则表达式.

Tim*_*nen 92

字符串的开头或开头?

字符串的开头和结尾

/^CTR.*$/
Run Code Online (Sandbox Code Playgroud)

/= delimiter
^=字符串的开头
CTR=字面值CTR
$=字符串的结尾
.*=除换行符之外的任何字符的零或更多

开始和结束

/^CTR.*$/m
Run Code Online (Sandbox Code Playgroud)

/=定界符
^线的开始=
CTR=字面CTR
$线的一端=
.*=零或多个任意字符除了换行符
m=启用多行模式下,该设置正则表达式来对待每行一个字符串,所以^$将匹配开始和行末

在多行模式下,您仍然可以使用\A\Z永久锚点匹配字符串的开头和结尾

/\ACTR.*\Z/m
Run Code Online (Sandbox Code Playgroud)

\A=表示字符串的开头
CTR=字面值CTR
.*=除了换行符之外的任何字符的零个或多个
\Z=字符串的结尾
m=启用多行模式

因此,匹配行开头的另一种方法是这样的:

/(\A|\r|\n|\r\n)CTR.*/
Run Code Online (Sandbox Code Playgroud)

要么

/(^|\r|\n|\r\n)CTR.*/
Run Code Online (Sandbox Code Playgroud)

\r=回车/旧Mac OS换行
\n= 换行/ Unix/Mac OS X换行
\r\n= windows换行

注意,如果你打算\在一些支持转义的程序字符串中使用反斜杠,比如php双引号""那么你需要首先转义它们

所以要运行\r\nCTR.*你会用它作为"\\r\\nCTR.*"


Cra*_*ent 14

^CTR
Run Code Online (Sandbox Code Playgroud)

要么

^CTR.*
Run Code Online (Sandbox Code Playgroud)

编辑:

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

  • 什么以.*结尾? (3认同)

Gna*_*nat 8

尝试^CTR.\*,字面意思是行开头,点击率,任何东西.

这将区分大小写,设置非区分大小写将取决于您的编程语言,或者^[Cc][Tt][Rr].\*在跨区域不区分大小写时使用.


Jos*_*ull 7

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

^
Run Code Online (Sandbox Code Playgroud)

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

^CTR
Run Code Online (Sandbox Code Playgroud)

示例:正则表达式

这样就足够了!

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

^CTR.*
Run Code Online (Sandbox Code Playgroud)

示例:更多正则表达式

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

$
Run Code Online (Sandbox Code Playgroud)

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

^CTR.*$
Run Code Online (Sandbox Code Playgroud)

示例:让我们发疯

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

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

/^CTR.*/gm
Run Code Online (Sandbox Code Playgroud)

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


Tim*_*ker 5

^CTR.*$
Run Code Online (Sandbox Code Playgroud)

匹配以 . 开头的行CTR