regex 正则表达式在各种“不正确”用例中匹配方括号[]

kninwzqo  于 2023-05-08  发布在  其他
关注(0)|答案(1)|浏览(164)

我需要提出一个相对复杂的正则表达式来匹配我所拥有的一些文本中的各种模式。文本具有有限种类的预定义标记,例如marker 1,marker 2到markerX等,它们在文本中是这样的:text text [marker1] text
方括号只能用于创建这些特定标记。
我想写一个正则表达式来匹配方括号被错误使用的情况-将匹配返回到特定的括号。
例如,我试图涵盖的错误如下:
text here [incorrect_marker]-无效标记错误
text here [ more text here-方括号使用无效
text here ] more text here-方括号使用无效
text here [[marker1] but too many square brackets-双方括号的使用无效
我不知道最好的办法是什么。

i2byvkas

i2byvkas1#

你可以使用这个regex:

\[(?!(?:marker1|marker2)\])(?:\w*\])?|(?<!\[(?:marker1|marker2))\]

参见regex101
说明:

  • marker1marker2是示例标记--根据需要扩展,用|分隔它们
  • \[\]是文字括号。结束部分不需要用反斜杠转义。
  • (?:marker1|marker2)匹配有效标记
  • (?! )是一个负前瞻Assert:中提供的模式不应与后面的文本匹配。所以(?!(?:marker1|marker2)\])意味着在当前位置不应该有一个有效的标记后跟]
  • (?:\w*\])?可选地匹配零个或多个字母数字字符(或下划线),后跟]--这是为了确保完全匹配错误的标记,而不仅仅是它的开始括号。
  • (?<! )是一个负的look-behindAssert:中提供的模式不应与当前位置之前的文本匹配。通过这种方式,可以匹配右括号,前提是它前面没有有效的标记和[

相关问题