我想用%27替换字符串中的某些单引号。单引号必须符合以下条件
例如'a','b'c'将成为'a','b%27c'
我如何在java中执行此操作?
答案 0 :(得分:3)
忽略您选择正则表达式执行此任务的原因,您可以使用以下正则表达式:
"(?<=[^,])'(?=[^,])"
请注意,第一个解决方案假设输入不包含任何新行字符,这使得行的开头和结尾有效地开始和结束整个字符串。如果假设不适用,即输入包含换行符,请使用第二种解决方案。
或更长的版本(此假设输入字符串中没有换行符):
"(?<!^)(?<!,)'(?!$|,)"
我分开了2个后卫,因为有a bug in Java 1.5 and 1.4.2 that affects look-behind with alternation。如果您打算仅支持Java 1.6及更高版本,则可以将两个后置组合在一起(?<!^|,)
。
如果您希望行首而不是字符串的开头,则需要启用MULTILINE
标记(?m)
,这会使{ {1}}和^
匹配行的开头和结尾,而不是字符串的默认开头和结尾。例如:
$
答案 1 :(得分:1)
使用负向前瞻和后瞻的正则表达式适用于您:
String repl = "'a','b'c'".replaceAll("(?<!(^|,))'(?!(,|$))", "%27");
// 'a','b%27c'