Perl:转义字符串中的特殊字符以匹配正则表达式

克莱默

我正在编写bash函数以使用正则表达式处理字符串操作。Bash内置功能在工作中非常差,我正在使用perl命令来完成它。

例如,这是我的“ strMatch”函数(以bash表示):

# Usage: if (strMatch <string> <regex>); then...
function strMatch {
    local str="$1"
    local regex="$2"

    local perlCmd='if (qq('$str') =~ m/'$regex'/g) { print "0"; } else  { print "1"; }'
    return $(perl -e "$perlCmd")
}

测试字符串:foo-bar\rLoading... xx%\rFile: "some-(filename.ext".
regex:-bar(?:.*?)File: "(.\*?)\.ext"

除了一件事外,一切都正常; 我找不到一种方法来适当地转义字符串中的特殊字符以进行匹配(至少对于其中一些字符)。
我是Perl的新手(除了regex语法),所以我尝试了到处都是的各种尝试,但都没有成功。

如果使用'qq',则不会处理'(',这被解释为没有匹配的')'的捕获组。我猜想
         -e第1行的'['... =>语法错误,“ qq(foo-bar \ rLoading ... xx%\ rFile:” some-(filename.ext“ 。)=〜m / -bar \ r(?:。*?)文件:“(。*?)\。ext” / g){“
         =>在EOF之前的任何位置都找不到字符串终止符”)“- e行1。

使用'quotemeta'会更糟,在':','%','\ r'处中断...几乎所有内容
         =>在-e第1行的“ bar \”附近找到了期望的反斜杠
         =>运算符或分号在%之前缺失

作为奖励,如果我添加'w'或'W'选项以获得perl警告,它不会输出任何内容!!!这是怎么回事?

我只希望字符串能够包含几乎所有内容,包括'%','((','[','\ r','\ n'......有人知道该怎么做吗?做错了吗?

编辑:回答

谢谢choroba,使用perl参数$ ARGV就像一个魅力。我还使用了更优雅ikegami解决方案的修改版本

现在的功能如下:

# Usage: if (strMatch <string> <regex>); then...
function strMatch {
    local str="$1"
    local regex="$2"

    local perlCmd='exit 1 if ($ARGV[0] !~ m/$ARGV[1]/g)'
    perl -e "$perlCmd" "--" "$str" "$regex"
    return $?
}

Edit2:添加了“-”以停止处理选项。

疾病

将字符串和正则表达式作为参数传递(我也简化了Perl代码):

#!/bin/bash
# Usage: if (strMatch <string> <regex>); then...
function strMatch () {
    local str="$1"
    local regex="$2"

    local perlCmd='print $ARGV[0] =~ m/$ARGV[1]/ ? 0 : 1'
    return $(perl -e "$perlCmd" "--" "$str" "$regex")
}

经过测试

~/test.sh $'foo-bar\rLoading... xx%\rFile: "some-(filename.ext"' '-bar(?:.*?)File: "(.*?).ext"'

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

TCL正则表达式可从特定特殊字符中修剪字符串

来自分类Dev

正则表达式匹配带特殊字符或不带重音字符的字符串?

来自分类Dev

正则表达式以匹配包含特殊字符的数字字符串

来自分类Dev

正则表达式中的转义特殊字符

来自分类Dev

正则表达式,用于将Python多行字符串与转义字符进行匹配

来自分类Dev

正则表达式匹配包含以下内容的字符串中的日期:特殊字符,数字,字母

来自分类Dev

使用正则表达式从特殊字符前后的字符串中获取数字

来自分类Dev

Perl正则表达式以匹配特殊字符

来自分类Dev

正则表达式,匹配字符串中的子字符串

来自分类Dev

正则表达式需要在字符串开头匹配特殊字符

来自分类Dev

正则表达式只匹配带有特殊字符的长字符串中的单词

来自分类Dev

使用正则表达式检索字符串中特殊字符之间的链接

来自分类Dev

Python正则表达式将带引号的字符串与转义的单引号匹配

来自分类Dev

正则表达式:在开头或某些特殊字符后匹配字符串

来自分类Dev

TCL正则表达式可从特定特殊字符中修剪字符串

来自分类Dev

Perl:标量和字符串匹配中的赋值(正则表达式)

来自分类Dev

Perl正则表达式:字符串文字包含元字符作为匹配表达式的变量

来自分类Dev

正则表达式,用于将Python多行字符串与转义字符进行匹配

来自分类Dev

正则表达式,用于文本中的特殊字符和字符串模式

来自分类Dev

PHP特殊的正则表达式模式,以匹配特定字符串后的URL

来自分类Dev

使用正则表达式从特殊字符前后的字符串中获取数字

来自分类Dev

返回字符串中的Java正则表达式特殊字符

来自分类Dev

使用正则表达式匹配包含数字和特殊字符的字符串

来自分类Dev

正则表达式匹配的字符串,如果字符串不以特殊字符结尾

来自分类Dev

仅在Perl中的正则表达式匹配中替换字符串

来自分类Dev

如何在正则表达式中匹配字符串,特殊字符和HTML标签?

来自分类Dev

无法通过为每个特殊字符转义 \ 来将字符串文字“{*}”与正则表达式匹配

来自分类Dev

perl 正则表达式与带有“+”字符的字符串匹配

来自分类Dev

正则表达式匹配字符串中的固定子字符串

Related 相关文章

  1. 1

    TCL正则表达式可从特定特殊字符中修剪字符串

  2. 2

    正则表达式匹配带特殊字符或不带重音字符的字符串?

  3. 3

    正则表达式以匹配包含特殊字符的数字字符串

  4. 4

    正则表达式中的转义特殊字符

  5. 5

    正则表达式,用于将Python多行字符串与转义字符进行匹配

  6. 6

    正则表达式匹配包含以下内容的字符串中的日期:特殊字符,数字,字母

  7. 7

    使用正则表达式从特殊字符前后的字符串中获取数字

  8. 8

    Perl正则表达式以匹配特殊字符

  9. 9

    正则表达式,匹配字符串中的子字符串

  10. 10

    正则表达式需要在字符串开头匹配特殊字符

  11. 11

    正则表达式只匹配带有特殊字符的长字符串中的单词

  12. 12

    使用正则表达式检索字符串中特殊字符之间的链接

  13. 13

    Python正则表达式将带引号的字符串与转义的单引号匹配

  14. 14

    正则表达式:在开头或某些特殊字符后匹配字符串

  15. 15

    TCL正则表达式可从特定特殊字符中修剪字符串

  16. 16

    Perl:标量和字符串匹配中的赋值(正则表达式)

  17. 17

    Perl正则表达式:字符串文字包含元字符作为匹配表达式的变量

  18. 18

    正则表达式,用于将Python多行字符串与转义字符进行匹配

  19. 19

    正则表达式,用于文本中的特殊字符和字符串模式

  20. 20

    PHP特殊的正则表达式模式,以匹配特定字符串后的URL

  21. 21

    使用正则表达式从特殊字符前后的字符串中获取数字

  22. 22

    返回字符串中的Java正则表达式特殊字符

  23. 23

    使用正则表达式匹配包含数字和特殊字符的字符串

  24. 24

    正则表达式匹配的字符串,如果字符串不以特殊字符结尾

  25. 25

    仅在Perl中的正则表达式匹配中替换字符串

  26. 26

    如何在正则表达式中匹配字符串,特殊字符和HTML标签?

  27. 27

    无法通过为每个特殊字符转义 \ 来将字符串文字“{*}”与正则表达式匹配

  28. 28

    perl 正则表达式与带有“+”字符的字符串匹配

  29. 29

    正则表达式匹配字符串中的固定子字符串

热门标签

归档