这个正则表达式怎么写

朝阳群众001 2000-12-21 03:08:00
如:begin desk is white end begin chair is white end

找出所有匹配出begin和end之间的字符串,begin匹配离自己最近的end

目标是要得到两个串:
desk is white
chair is white
...全文
241 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjsnrso 2001-01-15
  • 打赏
  • 举报
回复
$aaa="fff begin id='yyy' name='ppp' ffff xxxx zzzz end begin dddd gggg end begin asdf end";
$aaa=~ /.*?BEGIN.*?id\=\'(.*?)\'.*?name\=\'(.*?)\'.*?END.*/i;
printf "id=%s name=%s",$1,$2,"\n";
朝阳群众001 2001-01-13
  • 打赏
  • 举报
回复
我倒可以用C写个函数做split..但。。。。还是希望看到Regex Match的解决方案
朝阳群众001 2001-01-13
  • 打赏
  • 举报
回复
不错不错!
用Split函数?。。。

说白了吧,我是写C的,不是Perl。C可以使用 GNU Regex这个这个正则表
达式库。我问政则表达式的问题,结果都建议到Perl讨论区问;其实我一点也不
懂Perl(现在倒是懂了一点,呵呵)

能不能不用Split函数?GNU Regex只能做匹配(match)和查询(search)功能。。。
所以,我想知道能否仅用正则表达式的“匹配”功能做到上面的?

如能搞定,再加100分!!!!!!
ljf841 2001-01-10
  • 打赏
  • 举报
回复
OK,搞定!!!
$ddd="ffff begin id=name ffff ggg ddd end begin ggg end begin tsydgds end";
@dd=split /(end)/,$ddd ;
$dd[0]=~/begin (.*)/;
$ff=$1;
$ff=~/ ([^=]*) /;
满意了吧,分呢:》
ljf841 2001-01-09
  • 打赏
  • 举报
回复
$ddd="begin id=name ffff ggg ddd end";
$ddd=~/begin (.*)end/;
$ff=$1;
$ff=~/ ([^=]*) /;
已经成功运行了,你可以试一试,保管没错!!
可以把分给我了吧 :》
ljf841 2001-01-09
  • 打赏
  • 举报
回复
$ddd="begin id=name ffff ggg ddd end";
$ddd=~/begin (.*)end/;
$ff=$1;
$ff=~/ ([^=]*) /;
已经成功运行了,你可以试一试,保管没错!!
可以把分给我了吧 :》
朝阳群众001 2001-01-09
  • 打赏
  • 举报
回复
我问一个匹配的问题,假如存在多个 begin 与 end,这样的匹配:
$ddd=~/begin (.*)end/;
会得到第一个benin和最后一个end之间的东西(是否叫最大匹配?)
怎样才能仅匹配第一个begin和第一个end之间的东西?(我想得到最小的匹配)

hu_zy 2000-12-31
  • 打赏
  • 举报
回复
begin [([id="[0-9][0-9]*"](0,1) [name="[a-z][a-z]*"](0,1)) [a-z][a-z]* is [a-z][a-z]* end
Linus2000 2000-12-21
  • 打赏
  • 举报
回复
使用split函数试一试,先按end分割成若干子串,再把这些子串按begin分割
朝阳群众001 2000-12-21
  • 打赏
  • 举报
回复
说我用的文法可能枯燥了些,用HTML语法来比喻吧:
比如
<img src="my.gif" alt="个人相片">
<a id="1" href="/show.html">click here</a>
如取IMG的属性,src,alt
或者A的属性id, href
当然对于html来说属性顺序可变,而且属性可有可无。

能写出两着中的一个就可以了!167分啊。。不够的话还有 :-)


朝阳群众001 2000-12-21
  • 打赏
  • 举报
回复
哦,不:P
这是最简单的情况,忘记补充一点,
begin是可带属性的,如begin(id="1" name="desk") desk is white end
属性可带可不带,但属性名是固定的,只有id和name
如何取属性的值,和begin与end之间的主体?

x86 2000-12-21
  • 打赏
  • 举报
回复
这样可以吗?
/begin*desk is white*end/

2,204

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 CGI
社区管理员
  • CGI社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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