引言
嵌入式协同开发时经常会用到静态链接库文件(拓展名为.a),即.c文件编译的库。有时我们需要知道某个库打包了哪些c文件,通常可以用文本编辑器打开并查找,但是对于较复杂的库这样查找会非常麻烦,利用正则表达式则可以轻松解决。本文正是介绍一个使用C#开发的正则表达式匹配工具,该工具可从文本文件中一键提取出所有匹配项。
使用介绍
使用本工具需要熟悉正则表达式,可参考正则表达式教程 https://www.runoob.com/regexp/regexp-tutorial.html 。
本工具界面如下:
首先点击“打开”按钮,打开需要分析的文本文件。测试用“.a” 文本内容局部如下图,我们需要在其中找出需要的信息。
输入正则表达式
[a-zA-Z][a-zA-Z0-9_]*[\.][o]
以查找类似“xx.o”的字符串,点击“分析”按钮,即可查找并列出所有匹配项。
源码解析
1.正则表达式分析类
新建一个类用于正则表达式分析及存储结果。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace RegExpAnalyst
{
class RegExpAnalysis
{
public List<string> matches = new List<string>();
public string errorCode;
/// <summary>
/// 正则表达式分析
/// </summary>
/// <param name="input">要分析的字符串内容</param>
/// <param name="pattern">正则表达式</param>
/// <returns></returns>
public bool Analysis(string input, string pattern)
{
try
{
foreach (Match item in Regex.Matches(input, pattern))
{
matches.Add(item.Value);
}
}
catch (Exception e)
{
errorCode = e.Message;
return false;
}
return true;
}
}
}
2.打开文件操作
这里仅记录文件路径。
private void Button_Open_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog();
ofd.Filter = "全部文件|*";
if (ofd.ShowDialog() == true)
{
//此处做你想做的事 ...=ofd.FileName;
textBox_file.Text = ofd.FileName;
filePath = ofd.FileName;
TextBox_Msg.Text = "";
}
}
3.分析按钮操作
这里首先打开文件并读取到文件内容存入content,然后实例化一个RegExpAnalysis对象,并调用分析函数。分析函数会查找匹配项并存入matches,最后我们将matches内容输出到TextBox即可,如果分析出错则显示错误信息。
private void Button_Show_Click(object sender, RoutedEventArgs e)
{
String content;
FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
StreamReader sr = new StreamReader(fs);
content = sr.ReadToEnd();
fs.Close();
sr.Close();
//分析
RegExpAnalysis regExp = new RegExpAnalysis();
if (regExp.Analysis(content, textBox_Regexp.Text))
{
TextBox_Msg.Text = String.Format("匹配数量:{0}\n", regExp.matches.Count);
foreach (var item in regExp.matches)
{
TextBox_Msg.Text += (item + "\n");
}
}
else
{
TextBox_Msg.Text = regExp.errorCode + "\n";
}
}
资源下载
工具下载:https://download.csdn.net/download/xiaoqvae/14021550
源码下载:https://download.csdn.net/download/xiaoqvae/14021585