高分:关于正则表达式的问题。正则高手进!:)

wallacemqx 2006-06-19 11:28:48
我想在源代码中匹配 ''中的内容,比如 语句:fanme('1','2',0);中可以匹配出'1'和'2',但还要能匹配出fname,(,,,0,),相当于在''之外匹配其它字符,请问该正则表达式该怎么写????
谢谢了!

写了这样的语句,但没有实现,苦恼啊!!!!!!!!!!!


Regex r = new Regex(@"\w+|[^A-Za-z0-9_ \f\t\v](?!\(+\))|(\'|\"")(.*?)(\1)", RegexOptions.IgnoreCase | RegexOptions.Compiled);
...全文
341 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ivony 2006-06-20
  • 打赏
  • 举报
回复
编译器的语法词法分析不是正则表达式能搞定的。
Ivony 2006-06-20
  • 打赏
  • 举报
回复
([a-zA-Z0-9]+)|(\()|(\))|(\'[a-zA-Z]+\'(?=\s*))


你不应该用一个正则表达式解决问题,如果是做编译器的语法分析的话,自己写分析器比正则表达式更好。
wallacemqx 2006-06-20
  • 打赏
  • 举报
回复
这是本人的做法:比较笨,有没有更好的?

\{|\}|\=|\;|\,|\(|\)|\\|\n|\*|\/|\w+|[^A-Za-z0-9_ \f\t\v]\(|(\'|\"")(.*?)(\1)
wallacemqx 2006-06-20
  • 打赏
  • 举报
回复
我举的例子太简单了,其实要考虑的情况比较多,下面分析一下:

对于这样的语句: var f1name = ' '; 要能提取的字符如下:
var
f1name
=
' '
;
对于这样的语句: sysLog('dataset9 run error:');要能提取的字符如下:
sysLog
(

'dataset9 run error:'
)
;

对于这样的语句: /* f3name = DS_ResultValue(10,"0","0"); 要能提取的字符如下:
/
*
f3name
=
DS_ResultValue
(
10
,
"0"
,
"0"
)
;
对于这样的语句: //DS_Run(8); 要能提取的字符如下:
/
/
DS_Run
(
8
)
;


总之,对于语句中的存在双引号""和单引号''的部分要连同引号一同提取,对于引号之外的,按连续单词提取,不能把f1name 拆成f 1 name ,其它标点符号由单个提取,如,;()=+-*/

以上对于简单的例子可以胜任,对于我现在提出的例子不能胜任,请各位指点!



wallacemqx 2006-06-20
  • 打赏
  • 举报
回复
([a-zA-Z0-9]+)|(\()|(\))|(\'[a-zA-Z]+\'(?=\s*))

没有达到效果
wallacemqx 2006-06-20
  • 打赏
  • 举报
回复
有点类似于编译器的语法分析,但我的主要目的是在richtextbox中高亮关键字,所以想用一个正则表达式就解决问题


wallacemqx 2006-06-19
  • 打赏
  • 举报
回复
匹配源字符串: string s = "fname('1','2',0);"
wallacemqx 2006-06-19
  • 打赏
  • 举报
回复
不好意思,没说明白!

匹配字符串: "fname('1','2',0);"
匹配成功输出字符:fname
(
'1'
,
'2'
,
0
)
;

要求能成功匹配以上字符,我要把这些匹配的字符放进一个数组中来使用,各位高手请帮忙!

下面是实现代码,但匹配不成功:

TheBuffer.Initialize();
int count = 0;

Regex r = new Regex(@"\w+|[^A-Za-z0-9_ \f\t\v](?!\(+\))|(\'|\"")(.*?)(\1)", RegexOptions.IgnoreCase | RegexOptions.Compiled);
Match m;

for (m = r.Match(s); m.Success; m = m.NextMatch())
{
TheBuffer[count].Word = m.Value;
TheBuffer[count].Position = m.Index;
TheBuffer[count].Length = m.Length;

count++;
}

tianxiaoku 2006-06-19
  • 打赏
  • 举报
回复
怎么表达问题的能力这么差的,看都看不懂!!?晕死了
natfit 2006-06-19
  • 打赏
  • 举报
回复
没有看懂!

你直接写一个例子,指出想要得到的结果
yurow 2006-06-19
  • 打赏
  • 举报
回复
如果你是要对自定义的函数进行自解析的话

考虑情况1
fff123 ('11','啊你啊',0);

表达式
^[a-zA-Z]\w+|\(|'[^']*'|\)|\,|[0-9]+|\; //注意'啊你啊'中不能有'

输出

fff123
(
'11'
,
'aa'
,
0
)
;


情况2
fff123 (string a,string b,int c);

^[a-zA-Z]\w+|\(|[a-zA-Z]\w+\s+[a-zA-Z]\w*|\)|\,|[0-9]+|\;

fff123
(
string a
,
string b
,
int c
)
;
wallacemqx 2006-06-19
  • 打赏
  • 举报
回复
([a-zA-Z]+|\(|\'[0-9a-zA-Z]+\'|\,|\)|\;|[0-9]+)

\w+|\(|\'\w+\'|\,|\)|\;

都通过测试,谢谢!
wallacemqx 2006-06-19
  • 打赏
  • 举报
回复
([a-zA-Z]+|\(|\'|[0-9a-zA-Z]+|\,|\)|\;)

不符合要求,要求引号内连同引号一同匹配,谢谢!
yurow 2006-06-19
  • 打赏
  • 举报
回复
([a-zA-Z]+|\(|\'[0-9a-zA-Z]+\'|\,|\)|\;|[0-9]+)

fname
(
'1'
,
'2'
,
0
)
;
wallacemqx 2006-06-19
  • 打赏
  • 举报
回复
报错误如下:

正在分析“\w+|\(|\'\w+\'|\,|\|\;)”- ) 过多。





此正则表达式在C#下未运行通过,编译倒通过了,先谢谢了!
yurow 2006-06-19
  • 打赏
  • 举报
回复
([a-zA-Z]+|\(|\'[0-9a-zA-Z]+\'|\,|\)|\;)

fname
(
'1'
,
'2'
,
)
;
yurow 2006-06-19
  • 打赏
  • 举报
回复
([a-zA-Z]+|\(|\'|[0-9a-zA-Z]+|\,|\)|\;)

输出
fname
(
'
1
'
,
'
2
'
,
0
)
;
Santos 2006-06-19
  • 打赏
  • 举报
回复
如下正则表达式:

\w+|\(|\'\w+\'|\,|\)|\;

使用
string s = "fname('123','45',6)";
测试结果如下
frame
(
'123'
,
'45'
,
6
)
;
符合你的要求不?
wallacemqx 2006-06-19
  • 打赏
  • 举报
回复
不管怎样

先谢谢各位!

mib23 2006-06-19
  • 打赏
  • 举报
回复
好像比较麻烦。。。
加载更多回复(4)
该 Web 应用程序是与 KeePass 数据库兼容的浏览器和桌面密码管理器。 它不需要任何服务器或其他资源。 该应用程序可以在浏览器中运行,也可以作为桌面应用程序运行。KeeWeb 为您提供了一个免费的跨平台密码管理器,其中包括与 KeePass 的完全兼容性。 开源免费跨平台密码管理软件 KeeWeb 中文版开源免费跨平台密码管理软件 KeeWeb 中文版 KeeWeb 特色 适用于所有平台的桌面应用程序:在每个平台上,桌面应用程序看起来都很漂亮:macOS,Windows和Linux。您可以在桌面应用程序中打开本地文件。 主题:在深色和浅色主题之间切换,以您更喜欢的为准。 颜色收藏夹:使用颜色标记项目,并使用“颜色”选项卡轻松找到它们。 多文件支持:打开多个文件,搜索任何条目或将所有文件中的所有项目作为一个列表查看。 一键搜索所有文件:搜索适用于所有文件,所有操作均在一个搜索框中完成。 Dropbox 同步:打开 Dropbox 中的文件,自动跨设备同步更改。 简易标签输入:添加标签以安排条目。在列表中快速选择它们或添加新的。 拖放:将条目附件和数据库文件直接拖放到应用程序中。 受保护的字段:可以在需要时将其隐藏。而且它们将以比普通字段更安全的方式存储在内存中。 密码生成器:生成任意长度的密码,仅包含所需的符号。 脱机访问:保存文件以供脱机使用,即使是从 Dropbox 打开的文件也是如此。您始终可以访问离线版本,更改将在您再次在线时自动同步。 快捷方式:使用快捷方式可以更快地访问操作。 高级搜索选项:通过指定字段,搜索密码,历史记录并使用强大的正则表达式语法来优化搜索。 历史记录:您所做的所有更改都会记录到历史记录中。您可以回滚到任何状态或完全删除该状态。 条目图标:从预定义的高分辨率图标集中选择一个图标,下载网站图标或使用您自己的图标。 表格视图:在列表和表格布局之间切换。 嵌入式图像查看器:将图像附加到条目上,然后单击以查看。 开源:该应用程序是完全免费的:没有试用版,没有演示版本,没有限制。甚至更多:您始终可以自己从资源中构建它。源代码可在 GitHub 上获得。 您可以轻松地从具有时尚,直观界面的安全数据库中存储所有密码。只需单击即可完成所有操作。如上所述,KeeWeb 与 KeePass 兼容,利用 .KDBX 格式存储密码。这个事实允许打开 .KDBX 文件以及在本地存储它们,或者您可以将其与 Dropbox,Google Drive,OneDrive 等各种 Cloud 服务同步。 KeeWeb 包括用于密码组织的选项,例如用于特定类型密码的组,以方便参考和检索。 KeeWeb 提供了全部功能,包括自动高级搜索选项,剪贴板清除,自动锁定,附件支持,字段保护,快捷方式,密码生成器以及设置密码有效期的功能。它还结合了一种查看更改历史记录的方式,并具有回滚到任何状态或完全删除状态的附加好处。

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧