我需要在较大的文档中查找可能是信用卡详细信息的数字,例如346490606109917。我想忽略其中包含信用卡风格细节的较大数字,例如96213464906061099171。
在常规正则表达式中(请原谅这个双关语),我可以使用(?
我的模式是
(?<![0-9])(4[0-9]{12}(?:[0-9]{3})?|(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|6(?:011|5[0-9]{2})[0-9]{12}|(?:2131|1800|35\d{3})\d{11})(?![0-9])
例如,在正常正则表达式中,它将在abc346490606109917zyz上产生匹配,但在abc96213464906061099171xyz上不产生匹配。
但是,BigQuery使用的Regex2不支持它-它在留档中被列为“不支持”。
RE2中是否存在等价物,还是不可能?
下面是BigQuery标准SQL
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'abc346490606109917zyz' str UNION ALL
SELECT 'abc96213464906061099171xyz'
)
SELECT *, REGEXP_CONTAINS(str, r'(^|[^0-9])(4[0-9]{12}(?:[0-9]{3})?|(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|6(?:011|5[0-9]{2})[0-9]{12}|(?:2131|1800|35\d{3})\d{11})($|[^0-9])') check
FROM `project.dataset.table`
结果如下
Row str check
1 abc346490606109917zyz true
2 abc96213464906061099171xyz false
(^ |[^0-9])
部分标识字符串或非数字序列的开头。与($|[^0-9])相同,但它表示字符串或非数字序列的结束,而不是开始
如果您还需要提取卡号,请使用下面的示例
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'abc346490606109917zyz' str UNION ALL
SELECT 'abc96213464906061099171xyz'
)
SELECT *,
REGEXP_CONTAINS(str, r'(^|[^0-9])(4[0-9]{12}(?:[0-9]{3})?|(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|6(?:011|5[0-9]{2})[0-9]{12}|(?:2131|1800|35\d{3})\d{11})($|[^0-9])') check,
REGEXP_EXTRACT(str, r'(?:^|[^0-9])(4[0-9]{12}(?:[0-9]{3})?|(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|6(?:011|5[0-9]{2})[0-9]{12}|(?:2131|1800|35\d{3})\d{11})(?:$|[^0-9])') number
FROM `project.dataset.table`
结果将是
Row str check number
1 abc346490606109917zyz true 346490606109917
2 abc96213464906061099171xyz false null
这里,在REGEXP\u EXTRACT中,您需要使用(?:正则表达式)来表示非捕获组
如何在RE2中为“不以4或5开头的匹配字符串”编写正则表达式? 在PCRE中,我会使用,但RE2不支持该语法。
问题内容: 假设我有一个PHP函数foo: 有什么办法只能指定第二个可选参数? 例: 问题答案: PHP本身不支持命名参数作为函数。但是,有一些方法可以解决此问题: 使用数组作为该函数的唯一参数。然后,您可以从数组中提取值。这允许在数组中使用命名参数。 如果要根据上下文允许可选数量的参数,则可以使用func_num_args和func_get_args而不是在函数定义中指定有效参数。然后,根据参数
我试图找出我的字符串是否包含从a到z的所有字母 我们可以通过其他方法解决这个问题,但我正在尝试仅使用模式和匹配器来解决它。
问题内容: 我希望使用番石榴将其连接成一个字符串,但列表中的每个字符串周围都有环绕的字符串。所以我想列出一个字符串列表: 并生成此字符串: 我看到的示例似乎是生成3个以逗号分隔的名称,但我希望每个字符串都包含一些额外的字符串(每次都相同)。 我希望我在这里足够清楚。谢谢你的帮助。 问题答案: 为此,首先要进行转换:
我有一个字符串,有一些双引号转义了,有一些没有转义。像这样, 该字符串转换为文字。现在,我正在使用上面的正则表达式来替换非转义双引号。并且只有第二个双引号必须被替换。
我正试图在表格上做错误检查。我想看看一个电话号码是否有效,看它是否包含所有号码。有没有办法确定一个字符串中是否只有NMBER?