Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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_Regex Lookarounds_Oniguruma - Fatal编程技术网

Regex 如果前面没有一个组,则尝试匹配序列;如果前面有另一个组,则尝试匹配“是”

Regex 如果前面没有一个组,则尝试匹配序列;如果前面有另一个组,则尝试匹配“是”,regex,regex-lookarounds,oniguruma,Regex,Regex Lookarounds,Oniguruma,这是一个小元,但我试图找出一个正则表达式来匹配正则表达式以突出显示语法。有一个很长的背景故事,但为了简洁起见,我将跳过它。以下是我试图做的:我需要匹配注释(前面有并在行尾终止),仅当注释不在字符类([…])内时,尽管如果行中前面有一个完整的(封闭的)字符类,则应该匹配注释 复杂的因素是转义方括号-虽然行中前面的纯[后面没有结尾]表示我们仍在字符类中,因此是非法的,但是转义方括号\[可能存在,无论是否存在结尾转义方括号\] 也许一些例子会有所帮助。下面是一些注释应该匹配的实例: (\h{8}-\

这是一个小元,但我试图找出一个正则表达式来匹配正则表达式以突出显示语法。有一个很长的背景故事,但为了简洁起见,我将跳过它。以下是我试图做的:我需要匹配注释(前面有
并在行尾终止),仅当注释不在字符类(
[…]
)内时,尽管如果行中前面有一个完整的(封闭的)字符类,则应该匹配注释

复杂的因素是转义方括号-虽然行中前面的纯
[
后面没有结尾
]
表示我们仍在字符类中,因此是非法的,但是转义方括号
\[
可能存在,无论是否存在结尾转义方括号
\]

也许一些例子会有所帮助。下面是一些注释应该匹配的实例:

  • (\h{8}-\h{4}-\h{4}-\h{4}-\h{12})匹配UUID
    (无方括号)
  • ([A-Za-z_][A-Za-z0-9_]*)#有效的Python标识符
    (成对的未缩放方括号)
  • (\\\[\\?)\\匹配一些东西
    (转义开口方括号)
下面是一个不应匹配“尝试注释”的示例:

[A-Za-z#字母
0-9_-.]#数字和其他字符
(第一行不能匹配,第二行可以)

我决不是一个正则表达式大师(这就是为什么我要问这个问题!),但我尝试过摆弄正面和负面的外观,并试图将它们嵌套起来,但我除了与

(?<!\[)((#+).*$)
(?
只有在没有开头方括号的情况下,它才与注释匹配。但是,一旦我开始嵌套环顾四周,并试图匹配开头是否有转义符,我就被难住了。任何帮助都会……有帮助。

你是说这个吗

^\[[^\]]*\].*#.*$|#(.*)$


这相当简单,但适用于您的示例中的案例。因此,请尝试以下方法:

(?<=[\][)]\s)(#(.*))$

@AvinashRaj是的。我正在为Sublime开发插件,为突出显示正则表达式创建语法突出显示定义。检查我的答案。如果没有,我想再澄清一点。第一个几乎可以做到,除了字母和数字匹配得很好的
[a-Za-z0-9.]#.
不匹配。因此,
[A-Za-z0-9#字母和数字
不会被捕获。不只是在中间包含一个
\n
时才捕获?它看起来很有希望,但是签出-如果
\[
在parens中,它就可以正常工作,但如果它是独立的就不行了。没关系-签出-我刚刚添加了
\[
到lookback,它就可以工作了。请随时更新您的答案,我会接受它。@MattDMo我更新了答案,但我仍然有一个问题,我以为您不想在开始括号后匹配注释,现在您希望它匹配,发生了什么变化?我的正则表达式将在结束括号后匹配注释,或者在结束括号后匹配转义的开始括号(非其他字符),这就是你想要的吗?没关系,我知道你现在做了什么。我将对它进行更多的修改,以添加对更多
#
字符的支持,并在正则表达式的结尾和注释的开头之间添加更多的空格,但这里的内容非常好。谢谢!刚刚发现另一个问题-。两个底部用例不起作用。。。
(?<=[\][)]\s)(#(.*))$
^(?=(?:[-\w\d?*.+|{}\\\/\s<>\]]|(?:\\[\[\]()]))+(#+.*)$)|^(?=^[\[(].+?[\])]\s*(#+.*)$)
^(?:(?:[-\w\d?*.+|{}\\\/\s<>\]])|(?:\\[\[\]()])|^[\[(].+?[\])])+\s*(#+.*)$
^(?:(?:[-\w\d?*.+|{}\\\/\s<>\]\(])|(?:\\[\[\]()])|^[\[(].+?[\])])+\s*(?<valid>(?:#+).*)$|^[-\[\w\d?*.+|{}\\\/\s<>\(]+(?<invalid>(?:#+).*)$