bash 用于清理一些字符的正则表达式
bash regexp for cleaning some chars
我在 bash 中有一个要匹配和清理的字符串,例如:
POST_DATA="password=this*pass&is/for?testing"
我想匹配 = 符号清理(排除)此字符后的所有字符串 *&/?
我可以使用 = 符号后的所有内容:
[[ ${POST_DATA} =~ ^password=(.*)$ ]] && password="${BASH_REMATCH[1]}"
echo $password
这表明:
this*pass&is/for?testing
我想要一个需要输出的正则表达式:
thispassisfortesting
我尝试了一些排除模式,但效果不佳:
^password=(^[^\*\?&/])*$
有什么想法吗?谢谢。
使用参数扩展而不是正则表达式:
#!/bin/bash
POST_DATA="password=this*pass&is/for?testing"
after_eq=${POST_DATA#*=} # remove everything up to the first =
printf '%s\n' "${after_eq//[*&\/?]}" # remove all asterisks, ampersands, slashes and question marks
与perl :
% echo "$POST_DATA" | perl -pe 's/(?:password=|[*&\/?])//g'
thispassisfortesting
这里的问题是正则表达式应该匹配某些东西。你写了一个模式,它要么匹配某些东西,要么不匹配。它不应该删除东西,只是为了匹配。
因此,您尝试做的是删除一些特定字符以清理字符串,这不是正则表达式的用例。
您需要的是某种 String.replace(/[^*\?&/]/, "") ,它将从您的字符串中删除所有有问题的字符。
假设您在 PHP 工作(基于您使用的 ${POST_DATA}
),我建议在匹配 password=
之前使用:preg_replace('/[^\*\?&\/]/','',${POST_DATA})
以便所有删除违规字符。
我在 bash 中有一个要匹配和清理的字符串,例如:
POST_DATA="password=this*pass&is/for?testing"
我想匹配 = 符号清理(排除)此字符后的所有字符串 *&/?
我可以使用 = 符号后的所有内容:
[[ ${POST_DATA} =~ ^password=(.*)$ ]] && password="${BASH_REMATCH[1]}"
echo $password
这表明:
this*pass&is/for?testing
我想要一个需要输出的正则表达式:
thispassisfortesting
我尝试了一些排除模式,但效果不佳:
^password=(^[^\*\?&/])*$
有什么想法吗?谢谢。
使用参数扩展而不是正则表达式:
#!/bin/bash
POST_DATA="password=this*pass&is/for?testing"
after_eq=${POST_DATA#*=} # remove everything up to the first =
printf '%s\n' "${after_eq//[*&\/?]}" # remove all asterisks, ampersands, slashes and question marks
与perl :
% echo "$POST_DATA" | perl -pe 's/(?:password=|[*&\/?])//g'
thispassisfortesting
这里的问题是正则表达式应该匹配某些东西。你写了一个模式,它要么匹配某些东西,要么不匹配。它不应该删除东西,只是为了匹配。
因此,您尝试做的是删除一些特定字符以清理字符串,这不是正则表达式的用例。 您需要的是某种 String.replace(/[^*\?&/]/, "") ,它将从您的字符串中删除所有有问题的字符。
假设您在 PHP 工作(基于您使用的 ${POST_DATA}
),我建议在匹配 password=
之前使用:preg_replace('/[^\*\?&\/]/','',${POST_DATA})
以便所有删除违规字符。