正则表达式提取最后一个期间和md5字符串

时间:2018-10-03 17:04:28

标签: regex

我有以下正则表达式:

  

/ ^ [a-f0-9] {8} $ /--此表达式提取8个字符串作为 md5哈希,例如:如果我有以下字符串“ hello世界.305eef9f x1xxx 304ccf9f test1232“,它将返回“ 304ccf9f”

我还有以下正则表达式:

  

/。[^。] * $ /--此表达式在最后一个句点(包括)之后提取一个字符串,例如,如果我有“ hello world.this.is.atest.case9.23919sd3xxxs”,它将返回“ .23919sd3xxxs”

事实是,我已经阅读了一些有关正则表达式的信息,但是为了在最后一个句点(包括在内)之后找到md5字符串,我无法将这两个表达式结合在一起,例如:

  

topLeftLogo.93f02a9d.controller.99f06a7s ---->必须返回“ .99f06a7s”

提前感谢您的时间和帮助!

3 个答案:

答案 0 :(得分:1)

要在此范围内[a-f0-9]的最后一个点之后匹配字符八次,您可以(如果支持)使用正向超前(?!.*\.)来匹配您的值并断言后面的内容不包含点:

\.[a-f0-9]{8}(?!.*\.)

Regex demo

如果您要匹配a-z中的字符而不是99f06a7s等a-f字符,则可以使用[a-z0-9]

关于第一个示例

由于锚点^[a-f0-9]{8}$^,此正则表达式$将从字符串的开头到结尾匹配字符类中的一个范围8次。在同一行的hello world .305eef9f x1xxx 304ccf9f test1232中找不到匹配项。

关于第二个示例

.[^.]*$将匹配任何字符零次或更多次,然后不匹配点。例如,这也将匹配单个a,并且不必首先匹配点,因为您必须对点进行转义才能从字面上进行匹配。

答案 1 :(得分:1)

  

/^[a-f0-9]{8}$/ ---此表达式提取8个字符串作为md5哈希

是的,但是它不会从“ hello world .305eef9f x1xxx 304ccf9f test1232”返回“ 304ccf9f”,因为正则表达式中的^表示字符串的开始。它怎么可能在字符串中间匹配?

  

/.[^.]*$/ ---该表达式在最后一个句点之后提取一个字符串

不。如果您仅对第一个点进行转义\.

要结合使用这两种方法,您必须将^替换为\.

\.[a-f0-9]{8}$

答案 2 :(得分:1)

我添加这个是为了防止人们需要解决类似的问题:

  

情况1:例如,我们要从文件名字符串中获取十六进制([a-f0-9])8个字符的字符串   在最后一个句点和文件扩展名之间,例如,以删除该“散列”部分:

示例:

file.name2222.controller.2567d667.js ------>返回 .2567d667

我们将需要使用以下正则表达式:

\.[a-f0-9]{8}(?=\.\w+$)

  

情况2:例如,我们希望与上述相同,但忽略了第一个句点:

示例:

file.name2222.controller.2567d667.js ------>返回 2567d667

我们将需要使用以下正则表达式

[a-f0-9]{8}(?=\.\w+$)