我还在学习正则表达式,所以请原谅任何天真。
我一直在用这个网站测试: http://www.systemtextregularexpressions.com/regex.match
基本上,我在写一个正则表达式时遇到问题,这个正则表达式将在括号之间的管道之后的任何值上匹配。
给出一个示例字符串:
"<div> \n [dont1.dont2|match1|match2] |dont3 [dont4] dont5. \n </div>"
预期输出将是一个集合:
match1,
match2
迄今为止我能够获得的最接近的是:
(?!\[.*(\|)\])(?:\|)([\w-_.,:']*)
上面给出了值,包括管道和dont3
。
我也试过这个人:
\|(.*(?=\]))
但输出:
|match1|match2
答案 0 :(得分:1)
这是实现目标的一种方式:
(?<=\[[^\]]*\|)[^\]|]*
这里是模式的含义:
(?<=\[[^\]]*\|)
- Lookbehind表达式,以确保任何匹配必须以开括号开头,后跟任意数量的非闭括号字符,后跟管道符
(?<= ... )
- 声明一个外观表达式。匹配lookbehind的东西必须紧跟在文本之前才能匹配。但是,由lookbehind匹配的部分不包括在结果匹配中。 \[
- 匹配一个开括号字符[^\]]*
- 匹配任意数量的非近似括号字符\|
- 匹配竖线字符[^\]|]*
- 匹配任意数量的既不是近括号也不是竖线字符的字符。 lookbehind是贪婪的,因此它允许在open括号和匹配文本之间有任意数量的管道。
答案 1 :(得分:0)
答案 2 :(得分:0)
试试这个:
^<div>\s*[^|]+|([^|]+)|([^|]+)