在URL重定向

时间:2017-02-17 20:07:06

标签: regex

我正在尝试找到一个可以实现此目的的RegEx。我已经尝试了以下两种方法,但它似乎没有用。看起来我在制作逗号可选

时遇到了麻烦
"/cgi-bin/webscr\?(.*?),(.*)" -> https://www.paypal.com/cgi-bin/webscr?$1$2
"/cgi-bin/webscr\?(.*?)" -> https://www.paypal.com/cgi-bin/webscr?$1

示例输入/输出是:

http://www.example.com/cgi-bin/webscr?cmd=_xclick&business=me@my-email.com&amount=$300.00&currency_code=USD&item_name=Payment%20for%20invoice%20MS-12345&shipping=0&pbtype=service

TO:

https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=me@my-email.com&amount=300.00&currency_code=USD&item_name=Payment%20for%20invoice%20MS-12345&shipping=0&pbtype=service

http://www.example.com/cgi-bin/webscr?cmd=_xclick&business=me@my-email.com&amount=$30,000.00&currency_code=USD&item_name=Payment%20for%20invoice%20MS-12345&shipping=0&pbtype=service

TO:

https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=me@my-email.com&amount=30000.00&currency_code=USD&item_name=Payment%20for%20invoice%20MS-12345&shipping=0&pbtype=service

1 个答案:

答案 0 :(得分:0)

如果你真的想要消除所有$,那就像以下一样简单:

s/[\$,]//g

如果您想要更复杂并且确保您只删除美元符号,后面跟一个数字后面跟一个数字或后跟3位数字(例如1,234,432.00 ==> 1234432.00),那么您可以使用零-length断言:

s/(?:(?<=\d),(?=\d{3})|\$(?=\d))//g

我不知道您正在使用什么样的正则表达式引擎,但大多数现代正则表达式引擎都支持后视和前瞻 - 通常统称为环视。根据实现情况,您只需要搜索并替换模式并使其适应您的语言/实现。以上是perl搜索/替换模式。