获得一个后视可以根据需要回顾多少个角色?

时间:2014-08-07 18:58:47

标签: c# regex

我是这个正则表达式:

(\[\[.*?\]\])(?<!".*?)

Regular expression visualization

Debuggex Demo

和这个测试数据:

[[Hello]]
<tag Text="my [[Test]] is [[Test2]] for [[Test3]][[Test4]]">

如何让这种后视忽略"前面的那些?

它应与[[Hello]]匹配,但不与剩余部分匹配。但是,它当然与它们相匹配。

2 个答案:

答案 0 :(得分:4)

你的正则表达式实际上是为你的具体输入做的,我会写..(Working Demo

\[\[[^]]*\]\](?<!"[^"]*)

您也可以考虑在上下文中使用alternation operator,在左侧放置要排除的内容,(说扔掉它,它是垃圾)并放置您想要匹配的内容右侧的捕获组。

然后你可以参考捕获组来获得你的匹配结果。 (Working Demo

"[^"]*"|(\[\[[^]]*\]\])

答案 1 :(得分:1)

丢弃技术

您可以使用正则表达式技术来丢弃您不想要的内容。它包含一个图案线:

discard1|other discard|more crap|(the content I want)

Regular expression visualization

请注意,您想要的内容是最右侧和捕获组内的内容

说,你可以使用这个正则表达式:

.*".*".*|.*?(\[\[.*?\]\]).*?

<强> Working demo

MATCH 1
1.  [0-9]   `[[Hello]]`

环视

另一方面,如果你想使用正则表达式的外观(lookbehind和lookahead)你可以使用这个正则表达式:

(?<!").*?(\[\[.*?\]\])(?!.*")

<强> Working demo

Regular expression visualization

但我喜欢丢弃技术,它非常清晰,可以省去很多麻烦。如果您查找zx81anubhava帖子,他们会在正则表达式上发挥作用,您可以了解很多相关内容。