由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 简单的perl正则表达式文本替换多个空行问题求教
相关主题
请教Regular Expression,请问一个正则表达式的问题
问个关于正则表达式的超弱智问题...急请教:用java实现解析parse一个log文件,多谢指点
问个正则表达式的问题如何利用正则表达式提取如下字符串的前两段?
regular expression正则表达式里括号的转义好乱
python 正则表达式请教正则表达式的问题 (转载)
在emacs中怎么按照某种格式进行替换?请教一个正则匹配的问题
sed里面正则表达式匹配字符越少越好怎么写?python能检查出space是一个还是两个吗?
perl 的问题parsing file in node: js or python ?
相关话题的讨论汇总
话题: 空行话题: txt话题: text话题: perl话题: thinkm57
进入Programming版参与讨论
1 (共1页)
x**n
发帖数: 1055
1
最近正在看Jeffery的Mastering Regular Expressions一书p69,其中提到将多个连续
的空行替换成一个

的例子:
$text =~s/^s*$/

/mg;
目的是把一个纯文本中的多个空行(可含space和tab)替换为一个html的段落


不过这个命令工作原理似乎不太明白,在增强多行模式/m下,总是出现两个


比如我的文件txt(行号不算):
1 a
2
3
4
5 b
6
7
8
9
10 c
用如下的perl脚本t2h.pl:
#!/usr/bin/perl
undef $/;
$text=<>;
$text=~ s/^s*$/

/mg;
print "$text";
运行结果如下:
>./t2h.pl txt
a


b


c
似乎是什么都没有的空行就不行出现了两个连续的

,如果加了个空格就可以,具体
为什么有点奇怪了
xssn@thinkm57:~/regex$ cat txt -An
1 $
2 a$
3 $
4 $
5 $
6 b$
7 $
8 $
9 $
10 c$
11 $
12 $
13 $
14 $
15 $
16 $
17 $
18 $
xssn@thinkm57:~/regex$ ./t2h.pl txt


a


b


c
有哪位大牛可以解释一下为什么当有连续的完全空行替换会出现两个

?谢谢!

e*******o
发帖数: 4654
2
^ 的意思是在\n 之后。 $的意思是在\n之前。
a\n\n\nb
a\n 不match:
\s* 吃掉\n\n,后面是b,不行,吐出一个\n,match1次,吐出n后,前是\n,后面\n,
又match 一次,一共match两次。
a\n\n\n\s\nb:
\s* 吃掉\n\n\s\n,后面是b,不行,吐出一个\n,match1次,吐出n后, 前面是\s, 不
行, 剩下的一个n不match。一共match一次。
水平比较次,不知道说清楚没有。
用这个
https://metacpan.org/pod/Regexp::Debugger
rxrx your_scripts.pl
然后 按n,可以看动态的看怎么匹配的。
x**n
发帖数: 1055
3
一看您的说话方式(吃-吐)就知道是大牛,谢谢指点:-)

【在 e*******o 的大作中提到】
: ^ 的意思是在\n 之后。 $的意思是在\n之前。
: a\n\n\nb
: a\n 不match:
: \s* 吃掉\n\n,后面是b,不行,吐出一个\n,match1次,吐出n后,前是\n,后面\n,
: 又match 一次,一共match两次。
: a\n\n\n\s\nb:
: \s* 吃掉\n\n\s\n,后面是b,不行,吐出一个\n,match1次,吐出n后, 前面是\s, 不
: 行, 剩下的一个n不match。一共match一次。
: 水平比较次,不知道说清楚没有。
: 用这个

1 (共1页)
进入Programming版参与讨论
相关主题
parsing file in node: js or python ?python 正则表达式请教
请教一个变态的regular expression 替换在emacs中怎么按照某种格式进行替换?
implement a simple regular expression match?sed里面正则表达式匹配字符越少越好怎么写?
Java Regular expression 请教perl 的问题
请教Regular Expression,请问一个正则表达式的问题
问个关于正则表达式的超弱智问题...急请教:用java实现解析parse一个log文件,多谢指点
问个正则表达式的问题如何利用正则表达式提取如下字符串的前两段?
regular expression正则表达式里括号的转义好乱
相关话题的讨论汇总
话题: 空行话题: txt话题: text话题: perl话题: thinkm57