负先行短路问题 (REGEX) - 查找格式错误的字符串
Problems with negative lookahead shotcircuiting (REGEX) - Finding faulty formated strings
已编辑以使问题更清楚
我想出了以下正则表达式来帮助我找到 >(0[1-9]|1[0-2])\-\d{4}:\d+(,\d{1,2})?<
形式的表达式,我现在想做的是找出我的文本是否包含格式不正确的类似表达式,即是符合正则表达式第一部分(冒号之前)但不遵循指定数字格式的表达式,例如匹配 >01-2018:a<
、>01-2018:12,<
或 >01-2018:12,111<
我使用负前瞻尝试了以下 >(0[1-9]|1[0-2])\-\d{4}:(?!\d+(,\d{1,2})?).*<
我的解决方案的问题当然是可以说它会短路,这会让我在 ie 上出现负匹配。 >01-2018:12,<
因为它匹配“12”部分。我不确定如何进行。
您可以使用
/>(?:0[1-9]|1[0-2])-\d{4}:(?!\d+(?:,\d{1,2})?<)[^<]*</
详情
>
- 一个 >
字符
(?:0[1-9]|1[0-2])
- 月份数,01
到 12
-
- 连字符(无需转义)
\d{4}
- 任意 4 位数字
:
- 冒号
(?!\d+(?:,\d{1,2})?<)
- 如果在当前位置的右边没有
\d+
- 1 个或多个数字
(?:,\d{1,2})?
- 可选的非捕获组匹配 1 次或 0 次 ,
后跟 1 或 2 个数字
<
- 一个 <
字符
[^<]*
- 重要! - 这会消耗除 <
以外的任何 0+ 个字符才能到达第一个...
<
- <
字符。
已编辑以使问题更清楚
我想出了以下正则表达式来帮助我找到 >(0[1-9]|1[0-2])\-\d{4}:\d+(,\d{1,2})?<
形式的表达式,我现在想做的是找出我的文本是否包含格式不正确的类似表达式,即是符合正则表达式第一部分(冒号之前)但不遵循指定数字格式的表达式,例如匹配 >01-2018:a<
、>01-2018:12,<
或 >01-2018:12,111<
我使用负前瞻尝试了以下 >(0[1-9]|1[0-2])\-\d{4}:(?!\d+(,\d{1,2})?).*<
我的解决方案的问题当然是可以说它会短路,这会让我在 ie 上出现负匹配。 >01-2018:12,<
因为它匹配“12”部分。我不确定如何进行。
您可以使用
/>(?:0[1-9]|1[0-2])-\d{4}:(?!\d+(?:,\d{1,2})?<)[^<]*</
详情
>
- 一个>
字符(?:0[1-9]|1[0-2])
- 月份数,01
到12
-
- 连字符(无需转义)\d{4}
- 任意 4 位数字:
- 冒号(?!\d+(?:,\d{1,2})?<)
- 如果在当前位置的右边没有\d+
- 1 个或多个数字(?:,\d{1,2})?
- 可选的非捕获组匹配 1 次或 0 次,
后跟 1 或 2 个数字<
- 一个<
字符
[^<]*
- 重要! - 这会消耗除<
以外的任何 0+ 个字符才能到达第一个...<
-<
字符。