正则表达式转换解释

时间:2012-12-30 16:26:13

标签: regex text expression sublimetext2 transformation

我正在Sublime Text 2工作,为goto:@ command定义符号。我需要帮助来解释这个正则表达式转换:

<key>symbolTransformation</key>
<string>s/\/\*\*\s*(.*?)\s*\*\//** $1 **/; s/\/\*.*?\*\*\//./; s/\/\*[^\*].*?[^\*]\*\///</string>

我的目的是编辑转换,但我需要先了解它。

是否有参考学习这种特定的语法?我对正则表达式比较新,所有的\和/让我发疯! :)

如果不这样,有人可以带我走过它吗?

1 个答案:

答案 0 :(得分:2)

如果我们“解开”正则表达式,它们分别是:

  • /\*\*\s*(.*?)\s*\*/替换为** $1 **;
  • /\*.*?\*\*/替换为.;
  • 无任何替换/\*[^*].*?[^*]\*/(空字符串)。

第一个正则表达式:

/\*\*   # Look for '/' followed by two occurrences of '*',
\s*     # followed by zero or more space characters,
(.*?)   # followed by zero or more of any character, lazily (with capture),
\s*     # followed by zero or more space characters,
\*/     # followed by a '*' and a '/'

由于捕获中的量词是惰性的(*?),这意味着正则表达式引擎将在正则表达式的下一个组件(\s*)满足之前尝试匹配最小可能的文本量(与普通的“贪婪”量词不同,如*,如果需要,它会在给出文本以满足下一个组件之前尝试匹配最大可能量。捕获在替换文本中以$1形式提供。

第二个正则表达式:

/\*      # Look for a '/' then a '*',
.*?      # followed by zero or more of any character, lazily,
\*\*/    # followed by two '*' and a '/'

用一个点(.)替换所有这些。

第三个正则表达式:

/\*      # Look for a '/' then a '*',
[^*]     # followed by one character which is not a '*',
.*?      # followed by zero or more of any character, lazily,
[^*]     # followed by one character which is not a '*',
\*/      # followed by a '*' then a '/'.

用空字符串替换所有这些。