你好我想知道是否可以做这种类型的正则表达式:
我有一些代表okjects的字符,即#,@,$和可能在它们上面使用的操作,如+, - ,%.....每个对象都有不同的操作集,我希望我的正则表达式找到有效的对
因此,对于考试我希望配对#+,# - ,$ +匹配,但是yair $ - 不匹配,因为它无效。
那么有没有办法只使用正则表达式来做这个,而不使用正则表达式引擎在语言中做一些体操?
答案 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__
输出:
发现:'#+'
发现:'# - '
发现:'$ +'
发现:'#%'