[英]Translate Perl regular expressions to .NET
http://www.regular-expressions.info/refflavors.html中有一個很大的比較表。
大多數基本元素相同,區別在於:
細微差異:
\
,在Perl中是\\x{200A}
。 \\v
只是垂直制表符(U + 000B),在Perl中代表“垂直空格”類。 因此,Perl中有\\V
(?(name)yes|no)
,但在Perl中為(?(<name>)yes|no)
。 一些元素僅適用於Perl:
x?+
, x*+
, x++
等)。 改用非回溯子表達式( (?>…)
)。 \\N{LATIN SMALL LETTER X}
, \\N{U+200A}
。 \\l
(小寫的下一個字符), \\u\u003c/code> (大寫的下一個字符)。
\\L
(小寫), \\U
(大寫), \\Q
(引用元字符),直到\\E
為止。
Unicode屬性\\pL
和\\PL
簡寫形式。 您必須在.NET中包含括號,例如\\p{L}
。
諸如\\X
, \\C
類的奇怪東西。
特殊字符類,例如\\v
, \\V
, \\h
, \\H
, \\N
, \\R
向后引用特定的或先前的\\g1
, \\g{-1}
。 您只能在.NET中使用絕對組索引。
命名為反向引用\\g{name}
。 請改用\\k<name>
。
POSIX字符類[[:alpha:]]
。
分支重置模式(?|…)
\\K
使用后向( (?<=…)
)代替。
代碼評估斷言(?{…})
,延遲子表達式(??{…})
。
子表達式參考(遞歸模式) (?0)
, (?R)
, (?1)
, (?-1)
, (?+1)
, (?&name)
。
一些條件表達式的謂詞是Perl特定的:
- 代碼
(?{…})
- 遞歸
(R)
, (R1)
, (R&name)
- 定義
(DEFINE)
。
特殊的回溯控制動詞(*VERB:ARG)
Python語法
-
(?P<name>…)
。 使用(?<name>…)
代替。
-
(?P=name)
。 請改用\\k<name>
。
-
(?P>name)
。 .NET中沒有等效項。
某些元素僅是.NET:
可變長度后向。 在Perl中,要獲得積極的后視效果,請改用\\K
條件表達式中的任意正則表達式(?(pattern)yes|no)
。
字符類減法(未記錄?) [az-[dw]]
平衡組(?<-name>…)
。 這可以用代碼評估斷言(?{…})
后面跟(?&name)
來模擬。
參考文獻:
它們被設計為與Perl 5正則表達式兼容 。 因此,Perl 5正則表達式應該只在.NET中工作。
您可以按以下方式翻譯一些RegexOptions
:
[Flags]
public enum RegexOptions
{
Compiled = 8,
CultureInvariant = 0x200,
ECMAScript = 0x100,
ExplicitCapture = 4,
IgnoreCase = 1, // i in Perl
IgnorePatternWhitespace = 0x20, // x in Perl
Multiline = 2, // m in Perl
None = 0,
RightToLeft = 0x40,
Singleline = 0x10 // s in Perl
}
另一個技巧是使用逐字字符串,這樣您就無需在C#中轉義所有這些轉義字符:
string badOnTheEyesRx = "\\d{4}/\\d{2}/\\d{2}";
string easierOnTheEyesRx = @"\d{4}/\d{2}/\d{2}";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.