0
A
回答
1
正則表達式中的變量插值與字符串中的變量插值幾乎相同。給定,字符串將是"2 2+1"
。該變量已展開,但字符串中的代碼未執行。
圍繞這個的一個訣竅是在字符串中使用解引用引用。這使我們可以包含任意表達式,但語法有點麻煩。通常,我們用我們想包含的值創建一個數組引用,然後立即解引用它:@{[$x + 1]}
。這與Ruby的#{...}
插值或Bash $(...)
命令替換類似。
所以正則表達式/$x @{[$x + 1]}/x
會工作。
但在大多數情況下,這將更加清晰進行正則表達式之外的所有計算:
my $x = 2;
my $y = $x + 1;
/$x $y/x;
Perl的正則表達式的語法也有語法,可以動態地生成正則表達式的部分。使用上面的變量插值,插值變量內容,然後編譯正則表達式。但高級正則表達式可能會在模式匹配期間更改變量的值。這些延遲的正則表達式可以用(??{ ... })
語法編寫。這裏:/$x (??{ $x + 1 })/x
。但是,這是一個非常先進且容易出錯的正則表達式特性。這也會比普通的正則表達式慢。
1
有an extended pattern,它提供了在匹配運算符m/
或替換運算符s///
的匹配部分中的代碼執行。
它的版本替換代碼的回報,接着把它當作一種模式是
/(??{ code })/
所以你的情況
$_ = 23;
my $x = 2;
my ($m) = /(2(??{ $x+1 }))/;
say $m;
或
RE_EVAL: {
use re 'eval';
my ($m) = /($x(??{ $x+1 }))/;
say $m;
}
比賽和捕獲23
。
這裏use re 'eval'明確允許這一點,通常由於安全原因不允許。
這是一個非常複雜的功能,它帶有複雜的警告。除了在上述鏈接中的輸入外,還請按照該文本中的鏈接閱讀有關Embedded Code Execution frequency。
請不要使用這個複雜的工具,以方便或代替正確書寫的代碼。
相關問題
- 1. 正則表達式用Perl
- 2. Perl正則表達式在@
- 3. Perl正則表達式在\
- 4. 正則表達式在Perl
- 5. 如何在Perl中使用正則表達式
- 6. 如何在正則表達式中使用Perl變量?
- 7. 如何在perl中使用正則表達式分割
- 8. 如何在perl中使用zcat和正則表達式?
- 9. 如何使用正則表達式在.htaccess中使用正則表達式mod_rewrite
- 10. 正則表達式替換如何在perl中工作?
- 11. 正則表達式使用Perl
- 12. 使用Perl的URL正則表達式
- 13. Python中的正則表達式操作
- 14. 如何Perl遞歸正則表達式
- 15. 正則表達式用Perl,如預期
- 16. Perl:正則表達式
- 17. Javascript/Perl正則表達式
- 18. Perl正則表達式
- 19. Perl的正則表達式
- 20. Perl Oneliner正則表達式
- 21. Perl的正則表達式不工作
- 22. 2步正則表達式在Perl中
- 23. 如何在正則表達式中執行此操作?
- 24. 的Perl - 任意操作上的正則表達式
- 25. Perl正則表達式和數據提取/操作
- 26. 如何在正則表達式中使用Java lambda表達式
- 27. 如何在Erlang中使用正則表達式匹配正則表達式?
- 28. 在Perl中使用正則表達式模式生成語法?
- 29. Perl的正則表達式 - 動態正則表達式
- 30. 將Perl正則表達式轉換爲SQL正則表達式
從你的例子中很難知道爲什麼你不會在正則表達式之外進行操作 – beasy