首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图匹配一个序列,如果前面没有一个组,但是如果前面有另一个组,则是的。

试图匹配一个序列,如果前面没有一个组,但是如果前面有另一个组,则是的。
EN

Stack Overflow用户
提问于 2015-09-10 14:05:13
回答 2查看 370关注 0票数 1

这得到了一些元数据,但我正试图找出一个正则表达式来匹配正则表达式,以实现语法突出显示的目的。有一个好长的背景故事,但为了简洁起见,我会跳过它。下面是我要做的:我需要匹配一个注释(前面是#,在行尾结束),只有在字符类([...])中是而不是时,才需要匹配,但是如果该行前面有一个完整的(关闭的)字符类,则应该匹配它。

更复杂的因素是转义方括号--尽管行前面的普通[没有后面跟着结束的]表示我们仍然处于字符类中,因此是非法的,可以存在转义括号\[,也可以不存在结束转义括号\]

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

  • (\h{8}-\h{4}-\h{4}-\h{4}-\h{12}) # match UUID (根本没有方括号)
  • ([A-Za-z_][A-Za-z0-9_]*) # valid Python identifier (配对的未转义方括号)
  • (\||\[|\?) # match some stuff (转义开口方括号)

下面是一个“尝试注释”不应该与匹配的示例:

代码语言:javascript
复制
[A-Za-z # letters
 0-9_-.] # numbers and other characters

(第一行不应该匹配,第二行很好)

我绝不是一个裁判大师(这就是我问这个问题的原因!),但我试着在背后摆弄正反两面,试图筑巢,但我没有任何运气,除了

代码语言:javascript
复制
(?<!\[)((#+).*$)

它只与注释匹配,如果前面没有开头的方括号。不过,一旦我开始筑巢围观犬,并试图匹配,如果开局之前有一次逃脱,我被难住了。任何帮助都是..。很有帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-10 14:54:34

这是相当简单的,但在工作的情况下,从你的例子。所以试试这个:

代码语言:javascript
复制
(?<=[\][)]\s)(#(.*))$

演示

只有在前面加上括号和空格的情况下,它才匹配注释。

编辑

我认为你的情况要复杂得多,所以不妨试试这个:

代码语言:javascript
复制
^(?=(?:[-\w\d?*.+|{}\\\/\s<>\]]|(?:\\[\[\]()]))+(#+.*)$)|^(?=^[\[(].+?[\])]\s*(#+.*)$)

演示

它将只按组匹配(它根本不匹配任何文本,因为它只使用积极的展望,但是分组是允许的)。或者,如果您想直接匹配,则匹配更多文本,然后使用以下内容的组获得所需的内容:

代码语言:javascript
复制
^(?:(?:[-\w\d?*.+|{}\\\/\s<>\]])|(?:\\[\[\]()])|^[\[(].+?[\])])+\s*(#+.*)$

演示

但是,在这两种情况下,您可能都需要添加更多出现在正则表达式中的字符,以便第一个替代的(?:[-\w\d?*.+|{}\\\/\s<>\]])。例如,如果希望它与(\[ # works if escaped [ is in group中的注释相匹配,则需要将(添加到alternative中。但我不确定这是不是你想要的。

编辑“无效范围”

试着:

代码语言:javascript
复制
^(?:(?:[-\w\d?*.+|{}\\\/\s<>\]\(])|(?:\\[\[\]()])|^[\[(].+?[\])])+\s*(?<valid>(?:#+).*)$|^[-\[\w\d?*.+|{}\\\/\s<>\(]+(?<invalid>(?:#+).*)$

演示

票数 2
EN

Stack Overflow用户

发布于 2015-09-10 14:12:36

你是认真的,

代码语言:javascript
复制
^\[[^\]]*\].*#.*$|#(.*)$

演示

代码语言:javascript
复制
^\[[^\]]*\].*#.*$(*SKIP)(*F)|#.*$
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32504084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档