我有这样的字符串:
“一些标准文本CONST_INSIDE_QUOTES”blah blah CONST“可能还有其他引用”
问题是,我想用一些文本替换字符串中的所有常量,但它不能应用于引号中文本内的常量。我有这个正则表达式:
sed“s /([AZ] [A-Z0-9 _] *)([^ az])/< span class = \”const \“> \ 1< \ / span> \ 2 / g “
当然适用于所有的景点。任何想法如何排除它适用于引号常量?不幸的是只有sed ......
答案 0 :(得分:1)
好吧,它并不漂亮,但只要你不有嵌套引号就行。
也就是说:
blah "foo" blah "bar"
确定
"blah "foo" blah "bar" blah"
不行
它使用双引号作为字段分隔符,然后仅对奇数字段(通过%
运算符)起作用以进行替换。当不具有嵌套引号时,这基本上解决了平衡括号问题。
awk -F'"' '{
for(i=1;i<NF;i++)
if(i%2)
$i=gensub(/([[:upper:]][[:upper:][:digit:]_]*)/,"<span class=\"const\">\\1</span>","g",$i)
}1' OFS='"'
$ echo 'read(3, "ogpid=30589 0 0\nFIK/XBRADA08.STU"..., 1024); blah blah C3434ONST "some other text"' | awk -F'"' '{for(i=1;i<NF;i++)if(i%2)$i=gensub(/([[:upper:]][[:upper:][:digit:]_]*)/,"<span class=\"const\">\\1</span>","g",$i)}1' OFS='"'
read(3, "ogpid=30589 0 0\nFIK/XBRADA08.STU"..., 1024); blah blah <span class="const">C3434ONST</span> "some other text"
答案 1 :(得分:0)
正则表达式的一个众所周知的问题是匹配balanced parentheses,这相当于您在匹配平衡引号时遇到的问题(您在问题中称为逗号)。
你想要知道正则表达式中常量之前有零或偶数引号。不幸的是,正则表达式并不是以这种方式计算字符数。有关详细信息,请参阅this question的答案。