Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在第n次出现空白和第n次出现逗号之间匹配字符串?_Sql_Regex - Fatal编程技术网

Sql 如何在第n次出现空白和第n次出现逗号之间匹配字符串?

Sql 如何在第n次出现空白和第n次出现逗号之间匹配字符串?,sql,regex,Sql,Regex,我正在用PL/SQL进行编辑 我有以下字符串 伊利诺伊州芝加哥大大道59 W 60654号 我需要匹配字符串“Chicago”,我可以通过匹配第四个空格字符和第一个逗号字符之间的所有内容来实现。到目前为止,我提出了: (?<=\s)(.*)(?=,) (?此表达式可能有点复杂。让我们尝试另一种方法,可能将重点放在两个字母的状态上,然后使用类似于以下表达式的表达式扫回前面的单词: ^.+?(\w+)[,\s]+?[A-Z]{2}.+$ 我们可以看到,如果城市有不止一个单词,我们将面临问题

我正在用PL/SQL进行编辑

我有以下字符串

伊利诺伊州芝加哥大大道59 W 60654号

我需要匹配字符串“Chicago”,我可以通过匹配第四个空格字符和第一个逗号字符之间的所有内容来实现。到目前为止,我提出了:

(?<=\s)(.*)(?=,)

(?此表达式可能有点复杂。让我们尝试另一种方法,可能将重点放在两个字母的状态上,然后使用类似于以下表达式的表达式扫回前面的单词:

^.+?(\w+)[,\s]+?[A-Z]{2}.+$
我们可以看到,如果城市有不止一个单词,我们将面临问题。但是,如果我们在城市前面有一个固定单词列表,例如
Ave
BLVD
ST
,我们很可能会想出一个更好的表达方式,例如:

^.+Ave\s+(.+?)[,\s]+?[A-Z]{2}.+$
我们将其扩展到:

^.+(Ave|Street|ST|BLVD)\s+(.+?)[,\s]+?[A-Z]{2}.+$

正则表达式电路 可视化正则表达式:

试验
const regex=/^.+Ave\s+(.+?)[,\s]+?[A-Z]{2}.+$/gm;
康斯特街=伊利诺伊州芝加哥大大街西59号,邮编60654
伊利诺伊州芝加哥大道59 E大酒店60654
纽约州纽约市乔治华盛顿大道东59号,邮编60654
加利福尼亚州圣地亚哥乔治华盛顿大道东59号60654
加利福尼亚州圣彼得堡乔治华盛顿大道东59号,邮编60654`;
常量subst=`1`;
//被替换的值将包含在结果变量中
const result=str.replace(regex,subst);

console.log(结果)
您在什么环境中实现这个正则表达式?我在PL/SQL中编辑取决于您使用它的环境,只需使用
/\S+,/U
确保您不使用
g
标志。这将只捕获第一个命令行之前的单词。对于Emma的帮助,我非常感谢您了解这个方法我注意到一件事,当我在正则表达式101上正则表达式时,它似乎只突出了“第一组”中的芝加哥,而不是全部匹配。有实际区别吗?