一串原始的文本行通常有大量有用信息,你可以使用子表达式来收集数据,可以在之后单独使用。基本的规则是所有想通过模式来搜索的数据应当放在圆括号中,因为变量$matches会将这些子表达式以单独的序列返回。如果文本行首先包含了数据,然后是其它文本,两者之间以制表符分割,你可以如下描述这段模式:
# 定义模式: 由Tab分割的两个字符串 $pattern = "(.*)\t(.*)" # 生成一个由Tab分割的字符串 $line = "12/01/2009`tDescription" # 使用正则表达式匹配: $line -match $pattern #True # 显示结果: $matches <# # Name Value #---- ----- #2 Description #1 12/01/2009 #0 12/01/2009 Description #> $matches[1] #12/01/2009 $matches[2] #Description
当使用子表达式时,$matches会包含所有搜索模式,数组的第一个元素命名为“0”,子表达式分别位于两个圆括号中,为了使他们更加便于读取理解,你可以分配给每个子表达式它们自己的名子(键),接下来通过它们去调用匹配的结果。给子表达式命名,可以在圆括号中输入type ?
# 给子表达式命名: $pattern = "(?<Date>.*)\t(?<Text>.*)" # 生成包含Tab键的字符串 $line = "12/01/2009`tDescription" # 使用正则表达式匹配: $line -match $pattern #True # 显示结果: $matches <# # #Name Value #---- ----- #Text Description #Date 12/01/2009 #0 12/01/2009 Description #> $matches.Date #12/01/2009 $matches.Text #Description
每个子表达式检索的结果都需要存储空间,如果特定场合中不需要这些结果可以,可以丢弃它们,因为这样可以提高正则表达式匹配的速度。要丢弃结果,可以在子表达式中的第一个语句上加上“?:”
# 第二个子表达式不返回结果: $pattern = "(?<Date>.*)\t(?:.*)" # 生成包含制表符的字符串: $line = "12/01/2009`tDescription" # 使用正则表达式匹配: $line -match $pattern #True # 第二个子表达式没有多余的结果返回 $matches <# # #Name Value #---- ----- #Date 12/01/2009 #0 12/01/2009 Description #>
本文链接: https://www.pstips.net/regex-form-group.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!