Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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
和运算符regex_Regex_Arrays - Fatal编程技术网

和运算符regex

和运算符regex,regex,arrays,Regex,Arrays,我正在使用一个基于正则表达式的自动工具。我想匹配两个名字。示例:“约翰·弗朗西斯·爱德华·史密斯”与“约翰·史密斯”进行比较。另外,由于名字可能包含错误,我只比较第一个单词的前三个字母和最后一个单词的前三个字母。因此,这里的积极匹配是:“Joh”和“Smi”。我可以构建表达式(^\D{3})。*\s+(?=\s*$)(\D{3})。*$,但问题是引擎生成两个分组并对其使用OR运算符,而我需要,因此两者都需要正确。我什么都试过了。有什么建议吗?假设我正确理解了你的问题,这对我很有用 /^(\D{3

我正在使用一个基于正则表达式的自动工具。我想匹配两个名字。示例:
“约翰·弗朗西斯·爱德华·史密斯”
“约翰·史密斯”
进行比较。另外,由于名字可能包含错误,我只比较第一个单词的前三个字母和最后一个单词的前三个字母。因此,这里的积极匹配是:
“Joh”
“Smi”
。我可以构建表达式
(^\D{3})。*\s+(?=\s*$)(\D{3})。*$
,但问题是引擎生成两个分组并对其使用OR运算符,而我需要,因此两者都需要正确。我什么都试过了。有什么建议吗?

假设我正确理解了你的问题,这对我很有用

/^(\D{3}).*(\b[^\s]{3})/ 
^
锚定到行的开头
(\D{3})
捕获第一组
*
贪婪地尽可能多地吃
\b
查找“单词边界”
[^\s]{3}
是三个不是空白的字符,我想\s{3}也可以


诀窍在于.*\b将在字符串中找到最后一个单词边界

如果需要避免分组,可以尝试以下简单方法

\bJoh.*\bSmi
这将匹配一个包含“Joh”和“Smi”的字符串,并警告每个三个字母的序列都以一个单词开头(因此它与“John ClineSmith”不匹配)

编辑


我不是专门找约翰·史密斯。我正在尝试提取姓名的前3个字母和姓氏的前3个字母,其中输入的姓氏可能有1个或多个中间名(例如:John Robert James Smith)。但它不能是两个分组,结果必须是一个单词(即上例中的“JohSmi”)

很抱歉告诉你这个坏消息,但是你所要求的不能完全用正则表达式实现。正则表达式意味着一个接一个地匹配字符序列,而不会中断。您可以使用分组从最终匹配中提取子序列,也可以执行多个匹配,但正则表达式匹配将始终返回从第一个匹配字符到最后一个匹配字符的完整序列(无跳过)

您需要的是一个正则表达式,它从匹配的开始返回3个字符,从结束返回3个字符,中间没有任何字符。这是一个中断的序列,我知道没有任何正则表达式引擎能够做到这一点。您要么必须使用其他代码(php或任何工具),要么放弃此方法并尝试寻找替代方法


这个问题涉及同样的理由:

嗨,我正试图匹配两个名字,如上所述。一方面我输入银行对账单,另一方面我输出付款。我需要比较它们,找出不同之处。因此,我通过严格使用正则表达式的自动化工具来协调它们。当它匹配配对时,它会将它们从列表中删除,其余的都是手工完成的。因此,您可以从银行获得“John Smith”和从会计处获得“John Smoth”。名称是否始终遵循名称姓氏格式?从注释中听起来,您的工具提取组,然后比较一些输入,如果其中任何组匹配,则认为整个字符串匹配。听起来好像没有一个正则表达式技巧可以解决这个问题。调节工具的名称是什么?@Some1.Kill.the.DJ是的,它总是名称姓氏(可能发生另一种情况,但我们手动修复的)表达式起作用,但与我在初始问题中提供的相同。它构建了两个子组。在我的例子中,一组是“joh”,另一组是“smi”。然后引擎将“joh”或“smi”与“joh”或“smi”进行比较。在本例中,它是有效的,但如果文本是“John Jones”而不是“John Smith”,则在“Joh”(Joh)。^(Joh)。*(\bsmi)\S*$上仍会有一个正匹配项,仅成对匹配“Joh”和“smi”。如果需要使用一个regexp查找多个名称,则必须在^(joh)。*(\bsmi)\S*$|^(lar)。*(\bwal)\S*$引擎从两个源获取一行文本。然后,它通过applied regEx语句执行这两个命令。如果匹配,则比较并删除结果。文本行是一个名称。我想用第一个单词的前三个字母和最后一个单词的前三个字母作为捷径,以避免中间名和名字中的错误。如果我在上面的正则表达式语句中进行两个分组,那么引擎使用AND运算符(由于“Joh”,John Smith与John Jones成功匹配)。选项是根据我得到的参数构建一个单词(exmpl:JohSmi与JohJon相比)。我不是专门找约翰·史密斯的。我正在尝试提取姓名的前3个字母和姓氏的前3个字母,其中输入的姓氏可能有1个或多个中间名(例如:John Robert James Smith)。但它不能是两个分组,结果必须是一个单词(即上例中的“JohSmi”)。