using System; using System.Text.RegularExpressions;class Demo { static void Main() { foreach (string s in new string[]{"abaaaabacacaabaxxxyyyxyz", "abaaaabacacaabatesdfaxyz"}) { foreach (Match m in Regex.Matches(s, "aba.*?xyz", RegexOptions.RightToLeft)) { Console.WriteLine(m.Value); } } } } /* 程序输出: abaxxxyyyxyz abatesdfaxyz */
// 或者用这个也行:aba(?!.*aba).*xyz,这个正则就不用 RegexOptions.RightToLeft 选项了。using System; using System.Text.RegularExpressions;class Demo { static void Main() { foreach (string s in new string[]{"abaaaabacacaabaxxxyyyxyz", "abaaaabacacaabatesdfaxyz"}) { foreach (Match m in Regex.Matches(s, "aba(?!.*aba).*xyz")) { Console.WriteLine(m.Value); } } } } /* 程序输出: abaxxxyyyxyz abatesdfaxyz */
如果能保证是最后一组,那么加RegexOptions.RightToLeft参数即可,但如果是这样,就完全没必要用正则了,string的LastIndexOf就可以做到了 对于这种可能嵌套的字符串取最内层的,最稳妥的做法,就是整体排除 最典型的例子就是<div>...<div>...</div>...</div>取最内层的<div>...<div>foreach (string s in new string[] { "abaaaabacacaabaxxxyyyxyza", "abaaaabacacaabatesdfaxyzeer" }) { foreach (Match m in Regex.Matches(s, "aba((?!aba|xyz).)*xyz", RegexOptions.IgnoreCase)) { Console.WriteLine(m.Value); } } Console.ReadLine();
对abaaaabacacaabaxxxyyyxyza和
abaaaabacacaabatesdfaxyzeer
匹配结果为红色标记部分,我是这样写的:aba(.*?)xyz可匹配结果都不对,要怎么写正则表达式啊?
using System.Text.RegularExpressions;class Demo
{
static void Main()
{
foreach (string s in new string[]{"abaaaabacacaabaxxxyyyxyz", "abaaaabacacaabatesdfaxyz"})
{
foreach (Match m in Regex.Matches(s, "aba.*?xyz", RegexOptions.RightToLeft))
{
Console.WriteLine(m.Value);
}
}
}
}
/* 程序输出:
abaxxxyyyxyz
abatesdfaxyz
*/
using System.Text.RegularExpressions;class Demo
{
static void Main()
{
foreach (string s in new string[]{"abaaaabacacaabaxxxyyyxyz", "abaaaabacacaabatesdfaxyz"})
{
foreach (Match m in Regex.Matches(s, "aba(?!.*aba).*xyz"))
{
Console.WriteLine(m.Value);
}
}
}
}
/* 程序输出:
abaxxxyyyxyz
abatesdfaxyz
*/
对于这种可能嵌套的字符串取最内层的,最稳妥的做法,就是整体排除
最典型的例子就是<div>...<div>...</div>...</div>取最内层的<div>...<div>foreach (string s in new string[] { "abaaaabacacaabaxxxyyyxyza", "abaaaabacacaabatesdfaxyzeer" })
{
foreach (Match m in Regex.Matches(s, "aba((?!aba|xyz).)*xyz", RegexOptions.IgnoreCase))
{
Console.WriteLine(m.Value);
}
}
Console.ReadLine();