Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 请解释一下这个正则表达式_Regex_Textmate_Oniguruma - Fatal编程技术网

Regex 请解释一下这个正则表达式

Regex 请解释一下这个正则表达式,regex,textmate,oniguruma,Regex,Textmate,Oniguruma,正则表达式对我来说是一片空白。 我现在正在处理TextMate中的一个,它做了我希望它做的事情…但我不知道为什么它做了我希望它做的事情 /[[:alpha:]]+|( )/(?1::$0)/g 这在TextMate代码段中使用,它的作用是获取标签并将其作为id名称输出。因此,如果我在第一个位置键入“FirstName”,这将输出“FirstName”。 以前是这样的: /[[:alpha:]]+|( )/(?1:_:/L$0)/g (it might have been \L instead)

正则表达式对我来说是一片空白。 我现在正在处理TextMate中的一个,它做了我希望它做的事情…但我不知道为什么它做了我希望它做的事情

/[[:alpha:]]+|( )/(?1::$0)/g
这在TextMate代码段中使用,它的作用是获取标签并将其作为id名称输出。因此,如果我在第一个位置键入“FirstName”,这将输出“FirstName”。 以前是这样的:

/[[:alpha:]]+|( )/(?1:_:/L$0)/g (it might have been \L instead)
这将把“名字”变成“名字”。 所以我知道下划线为一个空格添加了一个下划线,/L将所有内容都小写…但是我不知道它的其余部分是做什么的,或者为什么

有人愿意一件一件地解释一下吗

编辑

下面是有问题的实际片段:

<column header="$1"><xmod:field name="${2:${1/[[:alpha:]]+|( )/(?1::$0)/g}}"/></column>

它正在搜索在一行中至少出现一次的任何字母字符
[:alpha:]+
或空格
()
它正在搜索在一行中至少出现一次的任何字母字符
[:alpha:]+
或空格
()

(?1
是一个条件,如果组1(一个空格)匹配,则用于去除匹配项;如果组1不匹配,则用
$0
替换匹配项。由于
$0
是整个匹配项,因此在这种情况下,它将被自身替换。此正则表达式与:

/ //g
即删除所有空格

/[[:alpha:]]+|( )/(?1:_:/\L$0)/g
此正则表达式仍使用相同的条件,除非现在组1匹配,否则将替换为下划线,否则将替换为完全匹配(
$0
)使用,由
\L
修改
\L
更改其后面所有文本的大小写,因此
\LABC
将导致
abc
;将其视为一个特殊的控制代码

(?1
是一个条件,如果组1(一个空格)匹配,则用于去除匹配项;如果组1不匹配,则用
$0
替换匹配项。由于
$0
是整个匹配项,因此在这种情况下,它将被自身替换。此正则表达式与:

/ //g
即删除所有空格

/[[:alpha:]]+|( )/(?1:_:/\L$0)/g
此正则表达式仍使用相同的条件,除非现在组1匹配,否则将替换为下划线,否则将替换为完全匹配(
$0
)使用,由
\L
修改
\L
更改其后面所有文本的大小写,因此
\LABC
将导致
abc
;将其视为一个特殊的控制代码。

此正则表达式(regex)格式基本上是:

 /matchthis/replacewiththis/settings
末尾的“g”设置意味着进行全局替换,而不仅仅是将正则表达式限制为特定的行或选择

进一步分解它

  [[:alpha:]]+|( )
匹配字母数字字符(保存在参数
$0
中)或可选的空格(保存在匹配参数
$1
中)

正如Roger所说,
表示这部分是有条件的。如果在参数
$1
中找到匹配项,则它将替换为冒号之间的内容
-在这种情况下没有任何内容。如果
$1
中没有任何内容,则匹配项将替换为
$0
的内容,即任何字母数字字符不是空格的r输出不变

这解释了为什么在第一个示例中删除空格,而在第二个示例中用下划线替换空格

在第二个表达式中,
\L
用于将文本小写

评论中的额外问题是如何在TextMate之外运行此表达式。以
vi
为例,我将其分为多个步骤:

:0,$s/ //g
:0,$s/\u/\L\0/g
上述命令的第一部分告诉vi运行一个
s
替换,从第
0行开始,在文件末尾结束(这就是
$
的意思)

表达式的其余部分使用与上述相同的规则,尽管vi中的一些表示法有点自定义-。

此正则表达式(regex)格式基本上是:

 /matchthis/replacewiththis/settings
末尾的“g”设置意味着进行全局替换,而不仅仅是将正则表达式限制为特定的行或选择

进一步分解它

  [[:alpha:]]+|( )
匹配字母数字字符(保存在参数
$0
中)或可选的空格(保存在匹配参数
$1
中)

正如Roger所说,
表示这部分是有条件的。如果在参数
$1
中找到匹配项,则它将替换为冒号之间的内容
-在这种情况下没有任何内容。如果
$1
中没有任何内容,则匹配项将替换为
$0
的内容,即任何字母数字字符不是空格的r输出不变

这解释了为什么在第一个示例中删除空格,而在第二个示例中用下划线替换空格

在第二个表达式中,
\L
用于将文本小写

评论中的额外问题是如何在TextMate之外运行此表达式。以
vi
为例,我将其分为多个步骤:

:0,$s/ //g
:0,$s/\u/\L\0/g
上述命令的第一部分告诉vi运行一个
s
替换,从第
0行开始,在文件末尾结束(这就是
$
的意思)

表达式的其余部分使用了与上述相同的规则,尽管vi中的一些符号有点自定义-。

我发现了一个处理正则表达式的好工具。我将您的第一个正则表达式粘贴到Buddy中,得到了底部框架中所示的解释:

我用它来帮助理解现有的正则表达式,构建我自己的正则表达式,根据字符串测试正则表达式,等等。正因为如此,我在@regexs上变得更好了。仅供参考,我在Ubuntu上运行Wine。

我找到了一个处理正则表达式的好工具。我将你的第一个正则表达式粘贴到Buddy上,我得到了底部框架中显示的解释:

我用它