是否可以制作以下的有条件正则表达式?

时间:2011-08-07 10:36:19

标签: regex

你好我想知道是否可以做这种类型的正则表达式:

我有一些代表okjects的字符,即#,@,$和可能在它们上面使用的操作,如+, - ,%.....每个对象都有不同的操作集,我希望我的正则表达式找到有效的对

因此,对于考试我希望配对#+,# - ,$ +匹配,但是yair $ - 不匹配,因为它无效。

那么有没有办法只使用正则表达式来做这个,而不使用正则表达式引擎在语言中做一些体操?

3 个答案:

答案 0 :(得分:3)

每个 okject ,并在[]

中使用它自己的规则
/(#[+-]|\$[+]|@[+-])/

你需要正确转义特殊字符

答案 1 :(得分:0)

体操很难。尝试类似/#\+|#-|\$\+/之类的东西。

请记住,+,$和^是保留的,因此它们需要被转义。

答案 2 :(得分:0)

另一种方法,不允许混合原始组合,但这可能会更慢 /(?!\$-|\$\%)([\#\$\@][+\-\%])/,但如果第一个角色有很多变化则不行。

my $str = '
  #+, #-, $+ to be matched,
  but yair $- not to be matched asit is invalid.
  $% $- #% $%
';


my $regex = 
 qr/
  (?!\$-|\$\%)          # Specific combinations not allowed
  (
    [\#\$\@][+\-\%]     # Raw combinations allowed
  )
 /x;

while ( $str =~ /$regex/g ) {
   print "found: '$1'\n";
}

__END__

输出:

发现:'#+'
发现:'# - '
发现:'$ +'
发现:'#%'