-4

我想用 %27 替换字符串中的某些单引号。单引号必须满足以下条件

  1. 单引号不在行首。
  2. 单引号不在行尾。
  3. 单引号前面没有逗号。
  4. 单引号后面没有逗号

例如 'a','b'c' 会变成 'a','b%27c'

我如何在java中做到这一点?

4

2 回答 2

3

忽略您选择正则表达式执行此任务的原因,您可以使用以下正则表达式:

"(?<=[^,])'(?=[^,])"

请注意,第一个解决方案假定输入不包含任何换行符,这使得行的开始和结束有效地开始和结束整个字符串。如果假设不适用,即输入包含换行符,请使用第二种解决方案。


或更长的版本(这假设您的输入字符串中没有换行符):

"(?<!^)(?<!,)'(?!$|,)"

我分开了 2 个后视,因为Java 1.5 和 1.4.2 中有一个错误会影响后视交替。如果您打算仅支持 Java 1.6 及更高版本,则可以将 2 个后视功能组合在一起(?<!^|,)

如果您想要的开头而不是字符串的开头,则需要启用MULTILINE标志(?m),它会生成^$匹配行的开头和结尾,而不是默认的字符串的开头和结尾。例如:

"(?m)(?<!^)(?<!,)'(?!$|,)"
于 2013-05-14T02:13:29.143 回答
1

使用负前瞻和后瞻的正则表达式对您有用:

String repl = "'a','b'c'".replaceAll("(?<!(^|,))'(?!(,|$))", "%27");
// 'a','b%27c'
于 2013-05-14T02:12:36.373 回答