php 正则匹配单双引号,关于正则表达式:正则表达式可在单引号内转义双引号...

我需要一个正则表达式来转义或捕获(如果尚未转义)所有双引号字符,并将它们放在一个单引号中,然后将开头的单引号转换为双引号!

我们正在重构PHP和JS文件中具有很多(我的意思是很多!)单引号字符串的文件。它们唯一的共同点是字符串至少在一行中,并且在两种语言中都用=表示。

我举一个例子(这个例子是丑陋的旧代码,所以请不要判断它,我已经做到了:))

我们有一个像这样开始的文件:

var baseUrl = $("#baseurl").html();

var head = ''+

'';

我希望它看起来像这样:

var baseUrl = $("#baseurl").html();

var head ="" +

"";

如您所见,未触及正确的双引号字符串。

所以我的基本问题是:如何捕获某个开始字符和结束字符(在我的情况下是字符')之间的一种字符(在我的情况下是字符"")。

这个正则表达式'.*(").*'或'[^']*(")[^']*'每次比赛总是为我捕获一个"。如果需要多个步骤,也可以,那么就可以了。

我对任何能够正常工作的解决方案(IDE特定,语言特定或外壳特定)感到满意。

请帮助,我很拼命,非常感谢

最大的问题是要弄清楚所有字符串的位置,因为您不能使用正则表达式解析所有JS或PHP。但是,如果我假设您不关心注释,那么此Ruby代码将捕获大多数情况(但您应查看其输出):

#!/usr/bin/ruby -p

gsub!(/'((?:[^\']|\\[\'])+)'/) do |m|

%Q{"#{$1.gsub("\'","'").gsub(/\\[^\\]/) {"\\#{$0}" }.gsub('"','\"')}"}

end

此代码采用stdin上给出的所有内容/文件参数的内容,找到单引号引起来的字符串(考虑到\\和\'的可能存在),然后对其进行替换,运行一系列替换在匹配的字符串中(清除反斜杠等)。结果打印到标准输出。如果您想要一种更自动化的方法,请用#!/usr/bin/ruby -pi.bak替换第一行;然后,无论呈现什么文件参数,都将对其进行破坏性的就地替换。旧文件保留了附加的.bak扩展名。

要运行此代码,如果您以前没有使用过Ruby,请将其另存为任何内容,例如fix-sq.rb;运行chmod +x fix-sq.rb;然后运行./fix-sq.rb file1 file2 file3。

谢谢工作几乎就像我想要的:)

该正则表达式只捕获一个",因为您只要求一个。如果要捕获所有引号,则需要在中间加上类似(".*)+的内容。也就是说,"捕获此模式的一个或多个:双精度引号后跟零个或多个任何字符。"

。*("。*)+。*不会提供我想要的内容,在"之后的每场比赛中都会捕获其他一些字符,但不会得到更多的比赛:(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值