Regex replace hexadecimal characters
我刚开始使用regex,无法创建表达式来解决我的问题。
我有一根像EDOCX1[0]的绳子。我想用-替换十六进制字符,即%20、%28和%29。
我知道这三个词都有不同的含义,但我可以用任何一个字符来代替它们,我的意思是-,甚至.或''(空格)。
所以,我想得到的输出是/abc/def-hi-hello-test。
我想找到%,用-替换%[a-zA-Z0-9][a-zA-Z0-9]中的三个字符,但没用。
有人能帮我写一个只替换十六进制字符的regex吗?
- 你说"不行"是什么意思?使用您的示例,它给出了什么输出?
- 您的regex将匹配您的所有示例…实际上比你想要的要多,因为十六进制只适用于a-f。
- 我们需要知道你以更具体的方式尝试了什么——你是在程序中写这个吗?或者在文本编辑器的搜索和替换对话框中使用它?正则表达式不是独立于语言的-您应该考虑编写一个简短的、自包含的、可编译的示例,以便我们更好地诊断您的问题。
- 看起来不错,您甚至可以将其更改为%[A-Z0-9]{2}或%[A-Z\d]{2},以便于阅读(取决于regex引擎)。
- @克里斯,你需要记住这个不区分大小写的标志。
- 你的regex看起来不错(除了包括G-Z,你不太可能注意到,因为你刚刚说它"不起作用",这实在是不够具体)。请用您选择的语言/工具构建一个SSCCE,其中应包括一个容易复制但不起作用的测试用例。
- @杜克林公平地说,我认为他会抓到一个URL编码的东西,他总是有大写字母(我现在不知道为什么我把整个字母范围都留在原地)。Derp。
- 我认为OP需要全球标志EDOCX1(或同等标志)。
- 你可能需要把100%正确的说法复杂化一点——我想%%28不应该变成%(,因为%%是一个逃逸的%。
搜索:
替换为:
示例:http://regex101.com/r/qr6xw7
- 使其变短(?i)%[a-f0-9]{2}。
- 我不认为雷杰克斯是真正的问题,因为他的例子将实际匹配的OP。我相信这是他的替代品…如果不知道他使用的语言,我们就无法真正帮助他。
- @用\d代替0-9,甚至更短。
- @Hamza,这取决于regex引擎。
- @Dukeling Well \d还匹配印度教、阿拉伯语或希伯来语数字。
- @斯梅尼,你知道了,设置了i修改器:)
- @哈姆扎,这对我来说是个新闻,尽管我可能会继续假装他们的意思是一样的,至少在我的宠物项目中,因为我从来没有用过非0-9位数的数字。
听起来你真正想做的是解码URL编码,我敢打赌你的主机语言有一个内置的功能。在PHP中,这是URL解码。
解码URL之后,可以更容易地修改要修改的内容。