正则表达式
正则表达式通常包含字母文本(Literal text)和元字符 (metacharacter) 符串。 元字符则更加灵活运用通用的表达式匹配所有符合此表达式规律的字符串 。 一、匹配单个字符 中间支持的类型:单词字符([ae])、非单词字符([!?,;@#$*])、字母 范围([A-Z])、数字范围([0-9]) eg. 正则表达式 可匹配字符串 (此例中"[ae]"为元字符,"ffect"为字母文本) 注意:1.要在字符类中匹配连字符,那么把连字符号作为第一个字符列出 即可。 2.可以在单个正则表达式中包含多个字符类。 eg. [01][0-9]:[0-5][0-9][ap]m 可以用来匹配如 12:59pm格式的所有时间 ^——排除某些字符(在[ ]中表此意,还可表示字符串的开头) eg. 正则表达式 可匹配字符串 不可匹配字符串
t ——匹配制表符 . ——匹配任何除了n以外的字符(或者在单行模式中的任何字符) ,或者是多行模式中的行结尾。 多行模式)。 1.句点字符(.)特别有用。可以用它来表示任何一个字符。 eg. 正则表达式 可匹配字符串
2.可以使用b匹配单词的边界 eg. 正则表达式 可匹配字符串 不可匹配字符串 3.A和z在确保字符串所包含的是某个表达式,而不是其他内容时很用。 eg.要判断Text控件是否包含单词"sophia",而不含任何额外的字符、换 行符或者空白。 Asophiaz 4.句点字符( . )具有特殊的含义,若要表示字母字符本身的含义,在前面 加一个反斜杠:. 三、匹配而选一的字符序列 |——匹配二选一 eg. 正则表达式 可匹配字符串
注意: b(bill|ted)和bbill|ted是不同的。 后者还可以匹配"malted"因为b元字符只应用于"bill" 。 四、用量词匹配
eg. 正则表达式 可匹配字符串
注意:也可以把量词与()一起使用,以便把该量词应用到整个字母序列 。 eg. 正则表达式 可匹配字符串 beautiful.
五、识别正则表达式和贪婪 如量词* 匹配0个或多个字符。假设要匹配字符串中任何HTML标签。你可能 会用如下正则表达式: <.*> 现有字符串A <i>quantifier</i> can be <big> greedy</big> 结果<.*>把 <i>quantifier</i> can be <big> greedy</big>都匹配上 了。 要解决该问题,需要与量词一起使用一个特殊的非贪婪字符“?”,因此 表达式变化如下: <.*?> 这样就可以正确匹配<i>、</i>、<big>、</big>。 ?能强制量词尽可能少地匹配字符,?还可以用在以下几个量词中: *? ——非贪婪的量词* 正则表达式中的字符模式,并且由正则表达式后面的编号或名称来引用改 模式。 ( ) ——用来捕获其中的字符串 数字——用编号来引用 eg. 正则表达式 可匹配字符串 注意:1.反向引用用来匹配html标签非常有效如<(w+)></1>可以匹配 <table></table>等类似格式的标签。 2.默认情况下,只要使用圆括号,就会捕获圆括号内所包 含的字符,可以使用n选项来禁用这个默认行为(在第7条里会详细介绍) ,或者添加?:到圆括号中。eg. (?:sophia) 或 (?n:sophia)此时不 会捕获sophia。 (?<捕获组名称>)k<捕获组名称>——用名称来引用 eg. 正则表达式 可匹配字符串 注意:在替换模式中使用捕获组的格式略有不同,要用$1、$2等来按数值 引用捕获,用${sophia}等名称来按名称引用捕获组 七、设置正则表达式的选项 eg. string str = "<h4>sophia</h4>" RegEx objRegEx = new RegEx("<h(d)>(.*?)</h1>"); $1>$2</font>")); i ——所执行的匹配是不区分大小写的(.net中的属性为IgnoreCase) (.net中的属性为Compiled) IgnorePatternWhitespace) 禁用了从右到左的匹配。 注意:1.m会影响如何解析起始元字符(^)和结束元字符($)。在默认情 况^和$只匹配整个字符串的开头,即使字符串包含多行文本。如果启用了 m,那么它们就可以匹配每行文本的开头和结尾。 2.s会影响如何解析句点元字符(.)。通常一个句点能匹配除 了换行符以外的所有字符。但在单行模式下,句点也能匹配一个换行 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |