ruby中正则表达式的使用

问题描述

$WEB_URL_PATTERN = /web_url[s]*(.*)[s]*;/murl_string = <<'EOF'web_url("crossdomain.xml","URL=http://{RASiteURL}/crossdomain.xml","TargetFrame=","Resource=0","RecContentType=text/xml","Referer=","Snapshot=t10.inf","Mode=HTML",LAST);web_url("DashboardServlet","URL=http://{WebSiteURL}/fbi.dashboard.ui/bridge/DashboardServlet","TargetFrame=","Resource=0","RecContentType=text/xml","Referer=http://{WebSiteURL}/lo-web/flex/main.swf","Snapshot=t11.inf","Mode=HTML",LAST);/*web_url("DashboardServlet_2","URL=http://{WebSiteURL}/fbi.dashboard.ui/bridge/DashboardServlet","TargetFrame=","Resource=0","RecContentType=text/xml","Referer=http://{WebSiteURL}/lo-web/flex/main.swf","Snapshot=t12.inf","Mode=HTML",LAST);*/EOF大家好我想用$WEB_URL_PATTERN去匹配url_string中的web_url函数,由于第3个web_url被注释掉了,我并不想让它也出现在结果中,请问我该如何修改正则表达式,让正则表达式能够正常处理这种情况,多谢! 问题补充:jim.jin 写道

解决方案

Ruby 和Tcl 甚至根本就不支持逆序环视结构
解决方案二:
引用问题补充:引用可以在http://www.rubular.com/测试下。 patten = web_url[s]*(.*)[s]*;(?!((s)**/)) 非常感谢! 但还是有一点儿问题 如果是这种情况,就不行了 str = web_url("crossdomain.xml", "URL=http://{RASiteURL}/crossdomain.xml", "Resource=0", "RecContentType=text/xml", "Mode=HTML", LAST); /* web_url("DashboardServlet", "URL=http://{WebSiteURL}/fbi.dashboard.ui/bridge/DashboardServlet", "Resource=0", "RecContentType=text/xml", "Mode=HTML", LAST); */ web_url("DashboardServlet_2", "URL=http://{WebSiteURL}/fbi.dashboard.ui/bridge/DashboardServlet", "Resource=0", "RecContentType=text/xml", "Mode=HTML", LAST); 所以我按你的思路,写成这样: $WEB_URL_PATTERN = /(?<![s]*/*)web_url[s]*(.*?)[s]*;(?![s]**/)/m 我加了个否定逆序环视上去,可为啥就不行呢? 运行的时候ruby1.92报错 invalid pattern in look-behind: /(?<![s]*/*)web_url[s]*(.*?)[s]*;(?![s]**/)/m (SyntaxError) 由于ruby1.87的REGEX引擎不支持逆序环视,1.92才支持 估计用http://www.rubular.com/是测试不了了原因不在这里,因为这里有贪婪匹配。只要稍微修改下就可以了。这样:加上一个+?(web_url[s]*(.*?)[s]*;)+?(?!([s]**/))测试stringweb_url("crossdomain.xml", "URL=http://{RASiteURL}/crossdomain.xml", "Resource=0", "RecContentType=text/xml", "Mode=HTML", LAST); /* web_url("DashboardServlet", "URL=http://{WebSiteURL}/fbi.dashboard.ui/bridge/DashboardServlet", "Resource=0", "RecContentType=text/xml", "Mode=HTML", LAST); */ web_url("DashboardServlet_2", "URL=http://{WebSiteURL}/fbi.dashboard.ui/bridge/DashboardServlet", "Resource=0", "RecContentType=text/xml", "Mode=HTML", LAST); /* web_url("DashboardServlet", "URL=http://{WebSiteURL}/fbi.dashboard.ui/bridge/DashboardServlet", "Resource=0", "RecContentType=text/xml", "Mode=HTML", LAST); */ 还用这个网站可以测试的。ruby的环视没有用过。
解决方案三:
result = web_url("crossdomain.xml", "URL=http://{RASiteURL}/crossdomain.xml", "TargetFrame=", "Resource=0", "RecContentType=text/xml", "Referer=", "Snapshot=t10.inf", "Mode=HTML", LAST); web_url("DashboardServlet", "URL=http://{WebSiteURL}/fbi.dashboard.ui/bridge/DashboardServlet", "TargetFrame=", "Resource=0", "RecContentType=text/xml", "Referer=http://{WebSiteURL}/lo-web/flex/main.swf", "Snapshot=t11.inf", "Mode=HTML", LAST);
解决方案四:
刚代码有点问题。这样写:web_url[s]*(.*)[s]*;(?!((s)**/))可以在http://www.rubular.com/测试下。patten = web_url[s]*(.*)[s]*;(?!((s)**/))args = mstr = web_url("crossdomain.xml", "URL=http://{RASiteURL}/crossdomain.xml", "TargetFrame=", "Resource=0", "RecContentType=text/xml", "Referer=", "Snapshot=t10.inf", "Mode=HTML", LAST); web_url("DashboardServlet", "URL=http://{WebSiteURL}/fbi.dashboard.ui/bridge/DashboardServlet", "TargetFrame=", "Resource=0", "RecContentType=text/xml", "Referer=http://{WebSiteURL}/lo-web/flex/main.swf", "Snapshot=t11.inf", "Mode=HTML", LAST); /* web_url("DashboardServlet_2", "URL=http://{WebSiteURL}/fbi.dashboard.ui/bridge/DashboardServlet", "TargetFrame=", "Resource=0", "RecContentType=text/xml", "Referer=http://{WebSiteURL}/lo-web/flex/main.swf", "Snapshot=t12.inf", "Mode=HTML", LAST); */
解决方案五:
你的代码贴出来报错。用前瞻就可以:$WEB_URL_PATTERN = /(?!/*s)web_url[s]*(.*)[s]*;/m
解决方案六:
将/* */ 中的内容都去掉在做匹配:url_string.gsub(//*.*?*/im, '').scan($WEB_URL_PATTERN)

时间: 2025-01-01 17:00:37

ruby中正则表达式的使用的相关文章

举例初步讲解Ruby中的正则表达式

  这篇文章主要介绍了Ruby中的正则表达式,是Ruby学习进阶当中的重要知识,需要的朋友可以参考下 正则表达式是一个特殊的字符序列可以帮助匹配或者找到其他字符串或串套,使用的模式保持一个专门的语法. 正则表达式文本是一个模式之间的斜线之间或任意分隔符 %r 如下: 语法: 复制代码 代码如下: /pattern/ /pattern/im # option can be specified %r!/usr/local! # general delimited regular expression

javascript中正则表达式和ruby中的一点差异

看到一个例子,不过这个例子中正则表达式的格式貌似是错的: Function.prototype.get_name = function(){ return this.name || this.toString().match(/function\s*(\[^()*](/)[1]; } 代码的原意是给任意有名的Function实例对象添加返回其名称的方法get_name;不过其中正则的格式不怎么对,简单思考了一下很快用ruby语法写出了: s = "function foo(x){...}&quo

Ruby程序中正则表达式的基本使用教程_ruby专题

Ruby大部分的内置类型都和其它的编程语言很相似.主要有strings,integers,floats,arrays等等.然而,只有脚本语言,如Ruby,Perl,和awk等提供了内置表达式类型的支持.正则表达式尽管比较隐蔽,但却是一个很强大的文本处理工具. 正则表达式是使用指定的模式匹配字符串的一种简单的方法.在Ruby中,创建正则表达式的典型方式是把模式写在两个斜线之间/pattern/. 毕竟,Ruby就是Ruby,正则表达式也是对象,也能像对象般操作. 例如,你可以使用下面的正则表达式写

详细介绍Ruby中的正则表达式_python

正则表达式是一种特殊序列的字符,它通过使用有专门语法的模式来匹配或查找其他字符串或字符串集合.语法 正则表达式从字面上看是一种介于斜杠之间或介于跟在 %r 后的任意分隔符之间的模式,如下所示: /pattern/ /pattern/im # 可以指定选项 %r!/usr/local! # 一般的分隔的正则表达式 实例 #!/usr/bin/ruby line1 = "Cats are smarter than dogs"; line2 = "Dogs also like me

Ruby中使用正则表达式的基础指引_ruby专题

正则表达式的内建支持通常只限于脚本语言如Ruby,Perl和awk等,这是一个耻辱:尽管正则表达式很神秘,但它是一个强大的文本处理工具.通过内建而不是通过程序库接口来支持它,有很大的不同. 正则表达式只是一种指定字符模式的方法,这个字符模式会在字符串中进行匹配.在Ruby中,通常在斜线之间(/pattern/)编写模式(pattern)来创建正则表达式.同时,Ruby就是Ruby,正则表达式是对象并且可以当作对象来操作. 比如,可以使用如下的正则表达式来编写模式,它会匹配包含Perl或Pytho

举例初步讲解Ruby中的正则表达式_ruby专题

 正则表达式是一个特殊的字符序列可以帮助匹配或者找到其他字符串或串套,使用的模式保持一个专门的语法. 正则表达式文本是一个模式之间的斜线之间或任意分隔符 %r 如下: 语法: 复制代码 代码如下: /pattern/ /pattern/im    # option can be specified %r!/usr/local! # general delimited regular expression 例如: #!/usr/bin/ruby line1 = "Cats are smarter

浅析Ruby中的正则表达式的使用_ruby专题

    如果只是需要中查找字符串的 text, 不要使用正则表达式:string['text']     针对简单的结构, 你可以直接使用string[/RE/]的方式来查询. match = string[/regexp/] # get content of matched regexp first_group = string[/text(grp)/, 1] # get content of captured group string[/text (grp)/, 1] = 'replace'

Ruby中的反射(Reflection)应用实例_ruby专题

在Java语言中,提供了发射机制,通过发射机制可以通过字符串构造出这个对象,可以获取对象的所有方法(包括私有方法),可以调用私有方法,可以更改成员变量的值(包括私有的成员变量).Ruby也是面向对象的高级语言,当然也提供了反射机制,今天我们讨论通过类名称构造类对象的功能. 一.通过类名称构造类对象 我们先看普通的构造: 复制代码 代码如下: module ModuleA     #the class name, later we will use it to create the corresp

Ruby 中$开头的全局变量、内部变量、隐藏变量介绍_ruby专题

Ruby 中充满了一系列的隐藏变量,我们可以从这些预定义的全局变量中获取一些有意思的信息. 全局进程变量 $$ 表示当前运行的 ruby 进程. 复制代码 代码如下: >> $$=> 17170 我们可以从当前进程杀死它自己 复制代码 代码如下: >> `kill -9 #{$$}`[1]    17170 killed     irb $? 表示最近一个子进程的状态 复制代码 代码如下: >> `echo hello`=> "hello\n&qu