我目前正在使用以下正则表达式:
(?<!&)[^&;]*(?!;)
匹配这样的文字:
match1<match2>
提取:
match1
match2
然而,这似乎与额外的五个空字符串相匹配。见Regex Storm.
我怎样才能匹配上面列出的两个?
请注意@xanatos的现有模式((?<=^|;)[^&]+
)仅匹配以下字符串中的匹配1到3而不匹配4:
match1<e;match2<match;3+match&4
答案 0 :(得分:3)
尝试将*
更改为+
:
(?<!&)[^&;]+(?!;)
更正确的正则表达式:
(?<=^|;)[^&]+
这里的基本思想是“好”子字符串从字符串的开头(^
)开始或在;
之后开始,并在遇到&
时结束( [^&]+
)。
第三版......但是我们在这里展示如果你有问题,并决定使用正则表达式,现在你有两个问题:
(?<=^|;)([^&]|&(?=[^&;]*(?:&|$)))+
答案 1 :(得分:2)
我用它来管理它:
(?<Text>.+?)(?:&[^&;]*?;|$)
这似乎与所有角落情况相符,但它可能不适用于我目前无法想到的情况。
如果字符串以&...;
模式开头,或者只是那个模式,那么这不会起作用。