Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.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
PHP中的RegEx用于提取nqad的组件_Php_Regex_Rdf_Triples - Fatal编程技术网

PHP中的RegEx用于提取nqad的组件

PHP中的RegEx用于提取nqad的组件,php,regex,rdf,triples,Php,Regex,Rdf,Triples,我正在寻找一个正则表达式,它可以帮助我解析一个nqad文件。nqad文件是一个纯文本文件,其中每一行表示一个四元组(s、p、o、c): …或在对象使用双引号的情况下: [0] => "http://mysubject" [1] => "http://mypredicate" [2] => "My Object" [3] => "http://mycontext" 最后一件事-在理想的世界中,正则表达式将满足场景的需要,不同组件之间可能有1个或多个空间,例如 <ht

我正在寻找一个正则表达式,它可以帮助我解析一个nqad文件。nqad文件是一个纯文本文件,其中每一行表示一个四元组(s、p、o、c):

…或在对象使用双引号的情况下:

[0] => "http://mysubject"
[1] => "http://mypredicate"
[2] => "My Object"
[3] => "http://mycontext"
最后一件事-在理想的世界中,正则表达式将满足场景的需要,不同组件之间可能有1个或多个空间,例如

<http://mysubject>     <http://mypredicate>  "My object"       <http://mycontext> .
“我的对象”。

此正则表达式将有助于:

/(\S+?)\s+(\S+?)\s+(\S+?)\s+(\S+?)\s+\./

(s,p,o,c)
值将在
$1、$2、$3、$4
变量中。

此正则表达式将有助于:

/(\S+?)\s+(\S+?)\s+(\S+?)\s+(\S+?)\s+\./

(s,p,o,c)
值将在
$1,$2,$3,$4
变量中。

这似乎可以通过以下方式实现(我不知道您的字符限制,因此它可能不适合您的需要,但适用于您的测试用例):

$line=”“;
$line2=“‘我的对象’”;
//删除条目之间不必要的空白(将$line更改为$line2进行测试)
$delimeter='--';

$result=preg_replace('/([“>]){1}\s+([“这似乎可以通过以下方式实现(我不知道您的角色限制,因此它可能不适合您的需要,但适用于您的测试用例):

$line=”“;
$line2=“‘我的对象’”;
//删除条目之间不必要的空白(将$line更改为$line2进行测试)
$delimeter='--';

$result=preg_replace('/([“>]){1}\s+([“我将添加另一个答案,作为仅使用正则表达式和explode的附加解决方案:

$line = "<http://mysubject> <http://mypredicate> <http://myobject> <http://mycontext>";
$line2 = '<http://mysubject> <http://mypredicate> "My object" <http://mycontext>';

$delimeter = '---'; // Can't use space
$result = preg_replace('/<([^>]*)>\s+<([^>]*)>\s+(?:["<]){1}([^">]*)(?:[">]){1}\s+<([^>]*)>/i', '$1' . $delimeter . '$2' . $delimeter . '$3' . $delimeter . '$4', $line);
$array = explode( $delimeter, $result);
$line=”“;
$line2=“‘我的对象’”;
$delimeter='--';//不能使用空格
$result=preg_replace('/]*)>\s+]*)>\s+(?:[“]){1}\s+]*)>/i','$1'.$delimeter.'$2'.$delimeter.$3'.$delimeter.$4'.$line);
$array=explode($delimeter,$result);

我将添加另一个答案,作为仅使用regex和explode的附加解决方案:

$line = "<http://mysubject> <http://mypredicate> <http://myobject> <http://mycontext>";
$line2 = '<http://mysubject> <http://mypredicate> "My object" <http://mycontext>';

$delimeter = '---'; // Can't use space
$result = preg_replace('/<([^>]*)>\s+<([^>]*)>\s+(?:["<]){1}([^">]*)(?:[">]){1}\s+<([^>]*)>/i', '$1' . $delimeter . '$2' . $delimeter . '$3' . $delimeter . '$4', $line);
$array = explode( $delimeter, $result);
$line=”“;
$line2=“‘我的对象’”;
$delimeter='--';//不能使用空格
$result=preg_replace('/]*)>\s+]*)>\s+(?:[“]){1}\s+]*)>/i','1'$delimeter。”$2' . $delimeter。”$3' . $delimeter。”$4’,$line);
$array=explode($delimeter,$result);

Hmm,我的文字可能有“.”例如,在中-您使用str_对$a的赋值是否会将其替换为零?是的,这就是为什么我对这种方法不满意,并在我的另一个答案中形成了一个正则表达式来完成整件事。Hmm,我的文字可能有“.”,例如,你是否会用str_将$a赋值为空?是的,这就是我对这种方法不满意的原因,我添加了一个只使用正则表达式和
explode
提取必要字符串的答案-我添加了一个只使用正则表达式和
explode
提取必要字符串的答案-
$line = "<http://mysubject> <http://mypredicate> <http://myobject> <http://mycontext>";
$line2 = '<http://mysubject> <http://mypredicate> "My object" <http://mycontext>';

// Remove unnecessary whitespace between entries (change $line to $line2 for testing)
$delimeter = '---';
$result = preg_replace('/([">]){1}\s+(["<]){1}/i', '$1' . $delimeter . '$2', $line);

// Explode on our delimeter
$array = explode( $delimeter, $result);
foreach( $array as &$a)
{
    // Replace the characters we don't want with nothing
    $a = str_replace( array( '<', '.', '>', '"'), '', $a);
}

var_dump( $array);
$line = "<http://mysubject> <http://mypredicate> <http://myobject> <http://mycontext>";
$line2 = '<http://mysubject> <http://mypredicate> "My object" <http://mycontext>';

$delimeter = '---'; // Can't use space
$result = preg_replace('/<([^>]*)>\s+<([^>]*)>\s+(?:["<]){1}([^">]*)(?:[">]){1}\s+<([^>]*)>/i', '$1' . $delimeter . '$2' . $delimeter . '$3' . $delimeter . '$4', $line);
$array = explode( $delimeter, $result);