首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何引用Regex干涉仪,即转义(文字)元字符(Perl / PHP)?

如何引用Regex干涉仪,即转义(文字)元字符(Perl / PHP)?
EN

Stack Overflow用户
提问于 2014-01-04 19:49:10
回答 3查看 240关注 0票数 0

我不确定,我认为这是不可能的,但我想我还是会问。

我想用一个量仪,它是一种元炭。例如:

括号、括号等,( ),……

但一切都是真的。

这不是我需要做的,而是我试图写一个转义例程作为一个项目的一部分。

那么,有什么问题?这个问题出现在正则体中,而它实际上不是一个元字符。

它是一个文字,类似于:

/ \( \) /,将用()替换正斜线浮标。

例如,在Perl中,这些方法不起作用

=~ m( \( \) )

=~ m( \\( \\) )

=~ m( \\\( \\\) )

=~ m( \\\\( \\\\) )

括号没有多少转义,就会分配一个反斜杠(文字\( )。

除除器上的反斜杠总是被移除,其余反斜杠则受正常引用规则的约束。这总是导致偶数反斜杠。

PHP显然也是如此。

就像我说的,我不会在正常的操作中用元字符来表示,这个

只是我正在尝试编写的实用程序(现在似乎是在写jepardy )。

我只想使用基本的转义规则,避免扫描字符串

中的文字(转义)元字符的选定参数的比较

regex文本体。

Perl使用正确的q()qq() (遗憾的是不是qr() )。

它做到这一点的同时,消除了越轨和脱扣器的逃避。

所以q( \\\( \\\) )导致了\( \)

谢谢你的帮助。

编辑

经过一些研究,我发现这是不可能的,所以效用被取消了。

不过,谢谢你的宝贵意见。我对Perl的数组印象深刻

引用选项,特别是“像运算符一样的报价”,这是一项工作

但是这样的话,测定仪才是真正的引号运算符,而不是一个标尺。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-04 23:13:19

我不确定您是在询问Perl还是PHP。我只知道Perl的事

Regex文字被解析了两次,一次由Perl编译器解析,一次由regex编译器解析。

  1. Perl解析器在处理插值、转义分隔符和序列(如\Q\L )时找到文字的结尾。这将产生regex模式(作为字符串)和匹配选项(例如,不区分大小写的匹配)。 qr/\/\(/生成模式/\( (/未转义)。类似地, qr(\/\()生成模式\/( ((未转义)。
  2. regex编译器采用regex模式和匹配选项,并返回已编译的regex。 /\(生成一个与/(完全匹配的正则表达式,而 \/(生成正则表达式语法错误。

若要生成与(完全匹配的正则表达式,则需要生成模式\(或等效的模式。以下是您的选择:

  • qr/\(/ (不要使用它作为分隔符)
  • $d='('; qr(\Q$d\E) (不要在文字中使用它)
  • qr(\Q\(\E) (使用\Q\(变成(之后插入转义)
  • qr(\x28) (使用等价的东西)
  • qr([\(]) (以不需要转义的方式使用它)

到目前为止,最好的选择是选择一个不同的分隔符:一个不是元字符,或者不是模式中没有使用的分隔符。这是微不足道的,因为它只对硬编码模式重要。

票数 4
EN

Stack Overflow用户

发布于 2014-01-04 20:12:34

我不知道PHP,但是您可以在Perl中使用\Q

代码语言:javascript
复制
"()" =~ m(\Q\(\)\E) and print "YES\n"

使用一个成员的字符类应该同时在Perl和PHP中工作:

代码语言:javascript
复制
"()" =~ m([(][)]) and print "YES\n"
票数 2
EN

Stack Overflow用户

发布于 2014-01-04 20:32:18

你能把你的例子发展得更精确一点吗?

因为

如果原始字符串-> '\('

然后/[\\][(]/将匹配它

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20925925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档