结构
GLibRegex
自: 2.14
说明 [src]
struct GRegex {
/* No available fields */
}
GRegex
是正则表达式模式的“已编译”形式。
GRegex
使用与 Perl 正则表达式类似的语法和语义来实现正则表达式模式匹配。查阅 PCRE 文档 中的语法定义。
某些函数接受 start_position
参数,将其设为不同于仅传递缩短的字符串和在模式以任何类型的回溯断言开头的模式中设置 G_REGEX_MATCH_NOTBOL
。例如,考虑模式“\Biss\B”,该模式查找单词中间出现的“iss”。(“\B”仅在主体中的当前位置不是单词边界时才匹配。)当从第四个字节(即“issipi”)应用于字符串“Mississipi”时,它不匹配,因为“\B”在主体的开头始终为假,而主体被视为单词边界。但是,如果传递整个字符串,但将 start_position
设置为 4,它将找到“iss”的第二个出现,因为它能够回溯到起始点之外,发现它前面是一个字母。
请注意,除非您设置了 G_REGEX_RAW
标志,否则传递给这些函数的所有字符串都必须用 UTF-8 编码。字符串中的长度和位置是字节数而不是字符数,因此,例如,“\xc3\xa0”(即“à”)是两个字节长,但它被视为一个字符。如果您设置了 G_REGEX_RAW
标志,字符串可以是非有效的 UTF-8 字符串,并且一个字节被视为一个字符,因此,“\xc3\xa0”是两个字节并包含两个字符。
匹配模式时,“\n”仅匹配字符串中的“\n”字符,而“\r”仅匹配“\r”字符。要匹配任何换行序列,请使用“\R”。此特定组匹配由两个字符序列组成的 CR + LF (“\r\n”) 或单个字符之一 LF(换行符,U+000A,“\n”),VT 垂直制表符,U+000B,“\v”),FF(换页符,U+000C,“\f”),CR(回车符,U+000D,“\r”),NEL(下一行,U+0085),LS(行分隔符,U+2028)或PS(段落分隔符, U+2029)。
圆点、抑扬符和美元字符的的行为受换行字符影响,默认情况下是识别任何换行字符(由“\R”识别的相同字符)。可以使用 G_REGEX_NEWLINE_CR
、G_REGEX_NEWLINE_LF
和 G_REGEX_NEWLINE_CRLF
编译选项以及 G_REGEX_MATCH_NEWLINE_ANY
、G_REGEX_MATCH_NEWLINE_CR
、G_REGEX_MATCH_NEWLINE_LF
和 G_REGEX_MATCH_NEWLINE_CRLF
匹配选项来更改此内容。编译模式时如果有 G_REGEX_EXTENDED
且遇到字符分类之外未转义的“#”,这些设置也相关。这表示持续到下一个换行符之后的注释。
从不同线程创建和操作同一 GRegex
结构不是问题,因为 GRegex
在创建和销毁之间不会修改其内部状态,另一方面,GMatchInfo
不是线程安全的。
低级别正则表达式功能是通过由 Philip Hazel 编写的出色 PCRE 库获得的。
2.14 起可用
函数
g_regex_check_replacement
检查 replacement
是否为有效的替换字符串(请参见 g_regex_replace()),即其中的所有转义序列都是有效的。
自: 2.14
g_regex_split_simple
以该模式拆分字符串,并返回令牌数组。如果模式包含捕获括号,还将返回每种子字符串的文本。如果模式在字符串中任何地方都没有匹配,则将整个字符串返回为第一个令牌。
自: 2.14
实例方法
g_regex_match
在 string
中扫描 regex
中的模式匹配。match_options
与创建 regex
结构时指定的匹配选项相结合,让你在重用 GRegex
结构时具有更大的灵活性。
自: 2.14
g_regex_match_all
使用标准的正则表达式匹配算法仅检索字符串中最长的匹配。此函数使用不同的算法,因此可以检索所有可能的匹配。有关更多文档,请参阅 g_regex_match_all_full()。
自: 2.14
g_regex_match_all_full
使用标准的正则表达式匹配算法仅检索 string
中最长的匹配,无法获取所有可用的匹配。例如,将 "<a> <b> <c>"
与模式 "<.*>"
匹配,你将得到 "<a> <b> <c>"
。
自: 2.14
g_regex_match_full
在 string
中扫描 regex
中的模式匹配。match_options
与创建 regex
结构时指定的匹配选项相结合,让你在重用 GRegex
结构时具有更大的灵活性。
自: 2.14
g_regex_replace
将 regex
中模式的所有出现替换为替换文本。替换文本中表单为 \number
或 \g<number>
的反向引用通过匹配的第 n 个捕获到的子表达式进行插值,\g<name>
指代具有给定名称的捕获到的子表达式。\0
指代完整匹配,但 \0
后跟一个数字则是字符的八进制表示。要在替换中包含一个原义 \
,请写成 \\\\
。
自: 2.14
g_regex_replace_literal
将 regex
中模式的所有出现替换为替换文本。replacement
会被原义替换,要包含反向引用,请使用 g_regex_replace()。
自: 2.14
g_regex_split
以该模式拆分字符串,并返回令牌数组。如果模式包含捕获括号,还将返回每种子字符串的文本。如果模式在字符串中任何地方都没有匹配,则将整个字符串返回为第一个令牌。
自: 2.14
g_regex_split_full
以该模式拆分字符串,并返回令牌数组。如果模式包含捕获括号,还将返回每种子字符串的文本。如果模式在字符串中任何地方都没有匹配,则将整个字符串返回为第一个令牌。
自: 2.14