Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 - Fatal编程技术网

Regex 正则表达式将单引号中的文本与特定的第二个引号匹配

Regex 正则表达式将单引号中的文本与特定的第二个引号匹配,regex,Regex,我有这个php版本 $string = "'Fred's Company' is... "; // OR $string = "'Fred's Company' has... "; $match = "/'((?:[^']+|\b'\b)+)'/"; preg_match_all($match, $string, $t); 因此,如果字符串本身不包含单引号,则上面的正则表达式可以工作,因此“Fred Company”,它将查找Fred Company,但是对于上面的版本,它将只查找F

我有这个php版本

 $string = "'Fred's Company' is... ";
 // OR
 $string = "'Fred's Company' has... ";
 $match = "/'((?:[^']+|\b'\b)+)'/";
 preg_match_all($match, $string, $t);
因此,如果字符串本身不包含单引号,则上面的正则表达式可以工作,因此“Fred Company”,它将查找
Fred Company
,但是对于上面的版本,它将只查找
Fred

为了解决这个问题,我需要第二个单引号来匹配字符串的
'is
'has
版本,因此我需要取回完整的
Fred的公司is/has
,并且仍然为
Fred的公司is/has
工作


如何对此更改上述正则表达式?

您可以使用智能的负前瞻,该前瞻断言结束单引号不会出现在其他两个外部单引号内:

$string = "'Fred's Company' has members in 'ATL'";
$match = "/'.*?'(?!\S)/";
preg_match_all($match, $string, $t);
print_r($t[0][0]);
这张照片是:

Array
(
    [0] => 'Fred's Company'
    [1] => 'ATL'
)
regex模式断言单个引号不会嵌入到单词中。无可否认,这对于所有格(属格)
s
的边缘情况是失败的,例如

Fred's employees' paychecks are going up this year.

您可以使用一个智能的负前瞻,它断言结束单引号不会出现在其他两个外部单引号内:

$string = "'Fred's Company' has members in 'ATL'";
$match = "/'.*?'(?!\S)/";
preg_match_all($match, $string, $t);
print_r($t[0][0]);
这张照片是:

Array
(
    [0] => 'Fred's Company'
    [1] => 'ATL'
)
regex模式断言单个引号不会嵌入到单词中。无可否认,这对于所有格(属格)
s
的边缘情况是失败的,例如

Fred's employees' paychecks are going up this year.

啊,我的坏!已被接受,但我刚刚意识到,如果字符串中有第二个引用的文本“Fred’s Company”的成员位于“ATL”,那么这将不起作用,在这种情况下,它会返回整个字符串-您能够修改吗?抱歉:)@CarySwoveland事实上,我欢迎你在这里发布更好的答案。总的来说,我看不出正则表达式有任何明显的方式可以涵盖所有的情况
:-)
Tim,我不理解这个问题,但我会重新阅读并努力思考。我认为OP只是想用单引号来捕捉所有术语,不考虑可能是语法性质的引号(例如撇号)。@CarySwoveland Yes,我已经意识到了这一点(只需阅读我的答案)。啊,我的坏!已被接受,但我刚刚意识到,如果字符串中有第二个引用的文本“Fred’s Company”的成员位于“ATL”,那么这将不起作用,在这种情况下,它会返回整个字符串-您能够修改吗?抱歉:)@CarySwoveland事实上,我欢迎你在这里发布更好的答案。总的来说,我看不出正则表达式有任何明显的方式可以涵盖所有的情况
:-)
Tim,我不理解这个问题,但我会重新阅读并努力思考。我认为OP只是想用单引号来捕捉所有术语,不考虑可能是语法性质的引号(例如撇号)。@CarySwoveland Yes,我已经意识到了这一点(请阅读我的答案)。当读者从所解决问题的陈述开始,然后是一个或多个说明性示例,展示每个问题的预期结果时,他们更容易理解问题。如果作者的代码在这之后才被提及,读者会很高兴的。这里给出了一个包含单引号文本的字符串。请在开头说你想用这个字符串做什么。字符串中可以出现多少个单引号?如果有4个或更多,如果可能的话,你想要返回什么?@CarySwoveland没关系,我已经接受了答案,下次如果我犯了同样的错误,我会提出新的问题:)当读者从问题的陈述开始,然后是一个或多个说明性的例子时,理解问题会容易得多,显示每个项目的预期结果。如果作者的代码在这之后才被提及,读者会很高兴的。这里给出了一个包含单引号文本的字符串。请在开头说你想用这个字符串做什么。字符串中可以出现多少个单引号?如果有4个或更多,您希望返回什么?@CarySwoveland没关系,我已经接受了答案,下次如果我犯了同样的错误,我将打开新的问题:)