Objective c 正则表达式在不带';t构成合法两位数转义序列的开始?

Objective c 正则表达式在不带';t构成合法两位数转义序列的开始?,objective-c,regex,Objective C,Regex,我想要一个正则表达式来查找源字符串中的%,该字符串不构成有效的两个十六进制转义字符(定义为%后跟两个十六进制数字,大写或小写)的开头,可用于仅将这些%符号替换为%25 (其动机是尽最大努力从各种来源的字符串中创建合法转义字符串,这些字符串可能是合法的百分比转义字符串,也可能不是,甚至可能是两者的混合,如果原始字符串已经正确编码(例如通过一揽子重新编码),则不会损害数据意图) 下面是一个输入字符串示例 他有%20a%2050%%20chance%20of%20living%2C%20但在那里只有%

我想要一个正则表达式来查找源字符串中的
%
,该字符串不构成有效的两个十六进制转义字符(定义为
%
后跟两个十六进制数字,大写或小写)的开头,可用于仅将这些
%
符号替换为
%25

(其动机是尽最大努力从各种来源的字符串中创建合法转义字符串,这些字符串可能是合法的百分比转义字符串,也可能不是,甚至可能是两者的混合,如果原始字符串已经正确编码(例如通过一揽子重新编码),则不会损害数据意图)

下面是一个输入字符串示例

他有%20a%2050%%20chance%20of%20living%2C%20但在那里只有%20a%2025%%20chance%20of%20that

这不符合任何编码标准,因为它混合了有效的转义字符,例如
%20
和两个松散的百分比符号。我想把那些
%
s转换成
%25
s

到目前为止,我的进展是识别一个regex
%[0-9a-z]{2}
,它可以找到合法的%符号,但我不知道如何修改它以找到不合法的符号

我们应该做到这一点。使用“向前看”查找未后跟有效的两位十六进制值的
%
,然后将找到的
%
符号替换为
%25
替换符号

(希望这可以(大概)与NSRegularExpression或您正在使用的任何工具一起使用)

%(?![a-fA-F0-9]{2})


这是一个百分比,后面跟一个a表示两个十六进制数字。

为了简单起见,我会使用负前瞻,尽管这可以实现。@JustinMorgan:Touche,我当时处于逆向思维模式。我正在寻找带有有效十六进制数字的
%
。很好的捕获,现在正在更正。它似乎适用于
replaceOccurrencesOfString
nsregularexpressionCaseSensitive
。非常感谢各位。
%(?![0-9a-fA-F]{2})