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

93

我正在尝试学习正则表达式。我有一个主机文件,其中有几个字段。我有一个扁平文件解析器,根据每行的前三个字母区分几种记录类型。如何编写一个正则表达式,使得前三个字母是“CTR”。

8个回答

135

是指行起始位置还是字符串起始位置?

字符串的开头和结尾

/^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.*"


1
对我来说,moneyball 是 "m = 启用多行模式,这将使正则表达式将每一行视为一个字符串,因此 ^$ 将匹配行的开头和结尾" -- 值得强调。我一开始就认为只要输入 ^ & $ 就可以了。但事实并非如此!祝100快乐。 - ruffin

24
^CTR
或者
^CTR.*

编辑:

为了更加清晰: ^CTR 将匹配行的开头和这些字符。如果你只想匹配一整行(并且已经有了需要使用的行),那么你其实只需要这个。但如果是这种情况,你可能最好使用一个预设的 substr() 类型函数。我不知道你使用的是什么语言。但如果你要匹配并获取整行,你将需要使用类似于 .*.*$ 的东西,具体取决于你使用的语言/正则表达式函数。


".*" 匹配 CTR 之后的所有内容,一直到行尾或字符串结尾,具体取决于你使用的编程语言。" - CrayonViolent

23

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

^

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

^CTR

示例:正则表达式

就应该足够了!

然而,如果你需要从你选择的语言中获取整行文本,请添加“匹配任何内容”的模式:.*:

^CTR.*

例子:更多正则表达式

如果你想要变得疯狂,请使用行尾匹配器

$

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

^CTR.*$

示例:让我们一起疯狂

注意:根据您使用正则表达式的方式和位置,您可能需要使用多行修饰符来匹配多行。有关从文件中选取行以处理它们的最佳策略的整个讨论,其中一些策略将需要此选项:

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

/^CTR.*/gm

例子: 我们不得不在regex101上使用m


8
尝试使用^CTR.\*,它的字面意思是“行首,CTR,任何内容”。
这将区分大小写,如果要设置不区分大小写,则取决于您的编程语言,或者如果跨环境不区分大小写,则使用^[Cc][Tt][Rr].\*

5
^CTR.*$

匹配以CTR开头的行。


2

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

^CTR
< p >
^表示字符串/行的开头

(注:该句为IT技术相关内容)

2
这个问题有一些歧义。
你的输入字符串是什么?它是整个文件吗?还是每次只有一行?有些答案假设是后者。我想回答前者。
从正则表达式中,你希望返回什么?你想要一个true/false来表示是否匹配成功?还是你想提取以CTR开头的整行?我会回答你只需要一个true/false匹配。
为了做到这一点,我们只需要确定CTR是否出现在文件的开头或紧接着一个换行符后面。
/(?:^|\n)CTR/

1
(?i)^[ \r\n]*CTR
(?i) - 不区分大小写 -- 如果需要区分大小写,则将其删除。 [ \r\n] - 忽略空格和换行符。 * - 重复0次或多次。 CTR - 以此字符串开始。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接