2014-08-30 394 views
1

在我学习flex的过程中,我使用扫描器回显输入添加行号。正则表达式匹配文件中的最后一个换行符

每一行后我都会显示一个计数器并将其递增。

问题是显示屏末尾总是有一个单独的行号。

我需要一个正则表达式来忽略除最后一个换行符外的所有换行符。我试过[\n/<<EOF>>]无济于事。

有什么想法?

+0

在你学习flex的过程中,请使用flex-lexer标签而不是flex标签。后者是针对Adobe/Apache Flex的问题。 – 2014-09-01 07:52:49

回答

0

您是否尝试过简单地做:

\n$ 

Regular expression visualization

Debuggex Demo

\n换行,字符串$比赛结束匹配。

+0

没有骰子。它拿起所有的换行符。 – MayNotBe 2014-08-30 22:35:17

+0

我不熟悉flex。你能提供一些关于你如何使用表达的上下文吗?也许发布代码示例或链接到函数引用?我这样说是因为如果你使用的是一行一行地处理你的输入,并将正则表达式应用到每一行,那么单单用正则表达式解决你的问题是不可能的。 – briantist 2014-08-30 22:40:09

+0

它是一行一行 - 我正在处理它。谢谢! – MayNotBe 2014-08-31 06:37:30

2

我不知道是什么的正则表达式引擎使用Flex的,但你可以使用这个表达式:

\z 

Working demo

\ Z ^断言在字符串的末尾位置。

仅匹配字符串的末尾。与$不同,这不受 多行模式的影响,并且与\ Z相反,在字符串末尾的 尾随换行符之前不匹配。

enter image description here

如果上述正则表达式不工作,那么你可以用这一个:

(?<=[\S\s])$ 

Working demo

编辑:由于Flex似乎工作比其他略有不同正则表达式引擎,你可以使用这个正则表达式:

[\s\S]$ 

获取每一行的最新字符。然后你可以迭代所有行,直到获得最后一行。在这里,你有一个在线的弹性正则表达式引擎工具:

http://ryanswanson.com/regexp/#start

enter image description here

+0

这是一个很酷的网站!感谢您的链接。这两个正则表达式都不幸工作,但我喜欢你在第二个上做的事! – MayNotBe 2014-08-31 06:10:05

+0

@MayNotBe我用一种可能对你有帮助的方法更新了我的答案。顺便说一句,我还添加了一个在线flex正则表达式引擎工具的链接。希望能帮到 – 2014-08-31 15:29:17

1

尝试下面的正则表达式,它会在该行的末尾搜索新行字符。

\n$ 
+0

谢谢,我也试过了。它拾取所有新行,而不是最后一行。 – MayNotBe 2014-08-31 14:27:33

+0

这适用于我的情况,只选择最后一个。 – Jan 2017-11-14 14:55:58

相关问题