相关疑难解决方法(0)

除了XHTML自包含标记之外,RegEx匹配开放标记

我需要匹配所有这些开始标记:

<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)

我相信它说:

  • 找一个小于,然后
  • 然后,查找(并捕获)az一次或多次
  • 然后找到零个或多个空格
  • 找到任何字符零次或多次,贪婪/,然后
  • 找到一个大于

我有这个权利吗?更重要的是,你怎么看?

html regex xhtml

1323
推荐指数
36
解决办法
270万
查看次数

Ruby lookbehind断言(1.9/2.0)中是否存在错误?

为什么正则表达式不(?<=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上测试过.

在Rubular上看到它

编辑:更多观察:

添加行尾锚点不会改变任何内容:

"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)

ruby regex lookbehind

34
推荐指数
1
解决办法
670
查看次数

后视模式中的无效模式

为什么这个正则表达式在 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'冒号而不是时间。

ruby python regex regex-lookarounds

5
推荐指数
1
解决办法
1126
查看次数

标签 统计

regex ×3

ruby ×2

html ×1

lookbehind ×1

python ×1

regex-lookarounds ×1

xhtml ×1