Find::在标记代码格式之外

carvr3hs  于 2022-09-21  发布在  Ruby
关注(0)|答案(1)|浏览(131)

我有一堆markdown文件,我想在其中搜索Ruby的双冒号::,而不是某些代码格式(例如,我忘记应用正确的markdown的地方)。例如

`foo::bar`

hello `foo::bar` test
`  example::with::whitespace  `

Proper::Formatted

Module::WithIndendation

Some::Nested::Modules


```ruby
CodeBlock::WithSyntax

Some::Class

Another::Class Heading

some text


正则表达式应该只与`Some::Class`和`Another::Class`匹配,因为它们缺少周围的反引号,而且也不在多行代码栅栏块内。

我有这个正则表达式,但它也与多行块匹配

[s]+[^]+(::)[^]+[s]?


有什么想法,如何排除这一点?

编辑:如果正则表达式可以在Ruby、JS和`grep`的命令行中工作,那就太好了。
8mmmxcuj

8mmmxcuj1#

对于原始输入,您可以在Ruby中使用此正则表达式来匹配::字符串

1.前面没有和 1.前面没有,后面跟一个空格:

Regex:

(?<!`s)(?<!`)bw+::w+

RegEx Demo 1

RegEx分手:

  • (?<!\s): Negative lookbehind to assert that <code>和空格不在前面的位置
  • (?<!): Negative lookbehind to assert that <code>不在前面的位置
  • \b:匹配单词边界
  • \w+:匹配1+个单词字符
  • :::匹配::
  • \w+:匹配1+个单词字符

您可以在Java脚本中使用此正则表达式:

(?<!`w*s*|::)bw+(?:::w+)+

RegEx Demo 2

对于gnu-grep,请考虑以下命令:

grep -ZzoP '`w*s*bw+::w+(*SKIP)(*F)|bw+::w+' file |
xargs -0 printf '%sn'

Some::Class
Another::Class

RegEx Demo 3

相关问题