我需要匹配所有这些开始标记:
<p>
<a href="foo">
Run Code Online (Sandbox Code Playgroud)
但不是这些:
<br />
<hr class="foo" />
Run Code Online (Sandbox Code Playgroud)
我想出了这个,并希望确保我做对了.我只抓住了a-z.
<([a-z]+) *[^/]*?>
Run Code Online (Sandbox Code Playgroud)
我相信它说:
/,然后我有这个权利吗?更重要的是,你怎么看?
为什么正则表达式不(?<=fo).*匹配foo(反之(?<=f).*)?
"foo" =~ /(?<=f).*/m => 1
"foo" =~ /(?<=fo).*/m => nil
Run Code Online (Sandbox Code Playgroud)
这似乎只在单线模式打开时发生(点匹配换行符); 没有它,一切都很好:
"foo" =~ /(?<=f).*/ => 1
"foo" =~ /(?<=fo).*/ => 2
Run Code Online (Sandbox Code Playgroud)
在Ruby 1.9.3和2.0.0上测试过.
编辑:更多观察:
添加行尾锚点不会改变任何内容:
"foo" =~ /(?<=fo).*$/m => nil
Run Code Online (Sandbox Code Playgroud)
但与懒惰的量词一起,它"有效":
"foo" =~ /(?<=fo).*?$/m => 2
Run Code Online (Sandbox Code Playgroud)
编辑:还有一些观察:
.+与它的等价物一样工作{1,},但仅限于Ruby 1.9(在这种情况下,这似乎是两者之间唯一的行为差异):
"foo" =~ /(?<=fo).+/m => 2
"foo" =~ /(?<=fo).{1,}/ => 2
Run Code Online (Sandbox Code Playgroud)
在Ruby 2.0中:
"foo" =~ /(?<=fo).+/m => nil
"foo" =~ /(?<=fo).{1,}/m => nil
Run Code Online (Sandbox Code Playgroud)
.{0,} 被破坏(1.9和2.0):
"foo" …Run Code Online (Sandbox Code Playgroud) 为什么这个正则表达式在 Python 中有效,而在 Ruby 中无效:
/(?<!([0-1\b][0-9]|[2][0-3]))/
Run Code Online (Sandbox Code Playgroud)
很高兴听到解释以及如何在 Ruby 中解决它
使用整行代码进行编辑:
re.sub(r'(?<!([0-1\b][0-9]|[2][0-3])):(?!([0-5][0-9])((?i)(am)|(pm)|(a\.m)|(p\.m)|(a\.m\.)|(p\.m\.))?\b)' , ':\n' , s)
Run Code Online (Sandbox Code Playgroud)
基本上,我试图添加'\n'冒号而不是时间。