正则表达式模式以产生适当的转义符行为

时间:2018-11-20 23:46:59

标签: regex yaml sublimetext3 syntax-highlighting

我正在为语法高亮显示Sublime Text 3语言定义。该语言是一种简单的“表达语言”(与Java无关),用于在显示面板上显示来自媒体库的信息。语法高亮显示的目的是准确弄清将在面板上显示的内容。

因此,我想确切地解释一下在解释并显示在显示面板上时,一系列转义字符的外观。转义字符是一个正斜杠,如果您想显示一个文字正斜杠,则必须使用另一个来转义它。因此,一系列的正斜杠将导致其他正斜杠显示在面板上。此外,如果在正斜杠后有一个特殊字符,它将被转义-但是,如果在两个(或四个或六个...)正斜杠后放置一个特殊字符,则不会被转义,因为转义字符会互相抵消。

我要实现的突出显示(带有特殊字符“ s”的示例)如下:

Desired Highlighting

我必须简单地通过以YAML格式提供Sublime Text正则表达式来实现此目的,因此解决方案必须是纯粹由正则表达式构成的解决方案。

这可能吗?如果是这样,我该如何实现?

3 个答案:

答案 0 :(得分:0)

查找奇数个斜杠不是特别有用。这是除去斜线的解析练习。如果在斜杠后接另一个斜杠,则为斜杠,否则为斜杠。

但是等一下,那里没有什么区别-不管以下字符是什么,它都是文字,所以...

使用正则表达式/(.)匹配所有“ slash-anychar”对,并替换为捕获的字符。

在Java中:

str = str.replaceAll("/(.)", "$1");

在python中:

str = re.sub('/(.)', '$1', str)

在perl中:

$str =~ s/\/(.)/$1/

答案 1 :(得分:0)

在没有关于当前语法结构的更多信息的情况下,很难确定,但是我认为您在这里寻找的只是一个与文字字符{相匹配的简单match结构{1}}后跟任何允许用作转义字符的字符,在您的示例中为字符/和字符s

您可能会想,您正试图创建的正则表达式需要找到包含转义序列的任意组合的最大匹配。但是,您提供的/规则会根据需要使用多次以消耗输入,因此它们一次只需要匹配单个语法结构。

此操作的一个简单示例是以下最小语法。前两个match构造仅用于下面的示例;他们实现了一行注释,并在未转义时将's'标记为特殊字符,以便在这种情况下更清晰。

第三个规则是匹配有效转义序列的条件,该序列是match,后跟另一个/(字面/)或/(字面{{ 1}})。

最后一条规则(可选)与s字符匹配,后跟不是有效转义字符的所有字符(包括不跟任何字符),并将其标记为s,以提示用户认为他们做的事很愚蠢。

在这里,我添加了一个空格字符作为潜在的有效转义,目的是进行无效的转义检测,以便在裸露的/之后的尾随空格也不会获得invalid范围。否则,该语法将假定您尝试引用空格字符。

/

在一个简单的测试中,此语法的结果将是:

Syntax example

答案 2 :(得分:0)

好的,所以对于它的价值,我知道了。这个:

%YAML 1.2
---

file_extensions:
  - example

  scope: source.example

  contexts:
    main:
    # special color setup #

    - match: s
      scope: green


    # desired behaviour #

      - match: '(/)(.)?'
        captures:
          1: grey
          2: white

给你这个:

Appropriate representation of escape character behaviour