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条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类常见问题

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

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

  11. 11

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

  12. 12

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

  13. 13

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

  14. 14

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

  15. 15

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

  16. 16

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

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

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

  21. 21

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

  22. 22

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

  23. 23

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

  24. 24

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

  25. 25

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

  26. 26

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

  27. 27

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

  28. 28

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

  29. 29

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

热门标签

归档