回答是否可以在字符串中找到模式的问题。 (true
或false
仅回答。在哪里或多少不是问题。)
假设正则表达式模式不包含所有格重复,从模式字符串中删除尾随或前导.*
和.*?
是否总是安全的?例如,find('.*blah.*', x)
保证返回与find('blah', y)
相同的结果。
如果第一个问题的答案是“否”,那么在正则表达式模式中是否只允许re2中的语法会怎样?
答案 0 :(得分:1)
阅读RE2 docs:
任何字符,可能包括换行符(s = true)
.
然后
s
让.
与\n
匹配(默认 false )
因此,.*
匹配除换行符之外的零个或多个字符。
如果没有/s
修饰符,则前导.*
会在blah
的同一行上找到除换行符之外的零个或多个字符,直到最后blah
。使用/s
,它将找到从字符串开头到字符串中最后一个blah
的所有子字符串。当您省略前导.*
时,正则表达式引擎将尝试匹配字符串中的第一个blah
。
如果 find
未锚定模式,则可以安全地在两端省略它,find('.*blah.*', x)
将产生相同的< strong> 布尔 结果为find('blah', y)
。否则,它不会。 字符串 结果可能会有所不同。