Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 随机出现新行的正则表达式(PHP)_Regex - Fatal编程技术网

Regex 随机出现新行的正则表达式(PHP)

Regex 随机出现新行的正则表达式(PHP),regex,Regex,为复杂的RDF/XML数据找到正确的正则表达式时出现问题。我尝试只在数据中查找和提取文字,这模糊地意味着在两个标记之间提取数据值 我尝试了一个表达式.*没错,您可以使用s模式,但是您可能需要加强左右边界,其中一些表达式看起来像: $re = '/<([^>]*?)>(.*?)<(\s*\/[^>]*?)>/s'; $str = '<rdfs:label xml:lang="en">1969</rdfs:label> <rdfs:l

为复杂的RDF/XML数据找到正确的正则表达式时出现问题。我尝试只在数据中查找和提取文字,这模糊地意味着在两个标记之间提取数据值


我尝试了一个表达式
.*没错,您可以使用
s
模式,但是您可能需要加强左右边界,其中一些表达式看起来像:

$re = '/<([^>]*?)>(.*?)<(\s*\/[^>]*?)>/s';
$str = '<rdfs:label xml:lang="en">1969</rdfs:label>
<rdfs:label xml:lang="pt">1969</rdfs:label>
<rdfs:comment xml:lang="zh">请参看:
*  1969年电影
*  1969年文学
*  1969年音乐
*  1969年体育
*  1969年电视</rdfs:comment>
<dbo:abstract xml:lang="zh">请参看:
*  1969年电影
*  1969年文学
*  1969年音乐
*  1969年体育
*  1969年电视</dbo:abstract>
<dbo:abstract xml:lang="nl">Het jaar 1969 is een jaartal volgens de christelijke jaartelling.</dbo:abstract>
<dbo:abstract xml:lang="it">Il 1969 (MCMLXIX in numeri romani) è un anno del XX secolo.</dbo:abstract>';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

var_dump($matches);
$re='/]*?)>(.*?)*?)>/s';
$str='1969
1969
请参看:
*  1969年电影
*  1969年文学
*  1969年音乐
*  1969年体育
*  1969年电视
请参看:
*  1969年电影
*  1969年文学
*  1969年音乐
*  1969年体育
*  1969年电视
1969年的哈特贾尔是克里斯特利克·贾特林的父亲。
1969年的《罗马数字》中的麦克莱克斯(MCMLXIX)是《第二十集》;
预匹配全部($re,$str,$matches,预设置顺序,0);
var_dump($matches);
输出
数组(6){
[0]=>
阵列(4){
[0]=>
字符串(43)“1969”
[1]=>
字符串(24)“rdfs:label xml:lang=“en”
[2]=>
字符串(4)“1969”
[3]=>
字符串(11)“/rdfs:label”
}
[1]=>
阵列(4){
[0]=>
字符串(43)“1969”
[1]=>
字符串(24)“rdfs:label xml:lang=“pt”
[2]=>
字符串(4)“1969”
[3]=>
字符串(11)“/rdfs:label”
}
[2]=>
阵列(4){
[0]=>
字符串(140)”请参看:
*  1969年电影
*  1969年文学
*  1969年音乐
*  1969年体育
*  1969年电视"
[1]=>
字符串(26)“rdfs:comment xml:lang=“zh”
[2]=>
字符串(97)”请参看:
*  1969年电影
*  1969年文学
*  1969年音乐
*  1969年体育
*  1969年电视"
[3]=>
字符串(13)“/rdfs:comment”
}
[3]=>
阵列(4){
[0]=>
字符串(140)”请参看:
*  1969年电影
*  1969年文学
*  1969年音乐
*  1969年体育
*  1969年电视"
[1]=>
字符串(26)“dbo:abstractxml:lang=“zh”
[2]=>
字符串(97)”请参看:
*  1969年电影
*  1969年文学
*  1969年音乐
*  1969年体育
*  1969年电视"
[3]=>
字符串(13)“/dbo:abstract”
}
[4]=>
阵列(4){
[0]=>
弦乐(108)“1969年的哈特贾尔是耶尔塔尔·沃根斯·德·克里斯特利克·贾特林。”
[1]=>
字符串(26)“dbo:abstractxml:lang=“nl”
[2]=>
弦乐(65)“1969年的哈特贾尔是耶尔塔尔·沃根斯·德·克里斯特利克·贾特林。”
[3]=>
字符串(13)“/dbo:abstract”
}
[5]=>
阵列(4){
[0]=>
字符串(103)“Il1969(罗马数字中的MCMLXIX)èun anno del XX secolo。”
[1]=>
字符串(26)“dbo:abstractxml:lang=“it”
[2]=>
字符串(60)“Il1969(罗马数字中的MCMLXIX)èun anno del XX secolo。”
[3]=>
字符串(13)“/dbo:abstract”
}
}

如果您希望探索/简化/修改该表达式,它已被删除 在的右上面板上进行了说明 .如果你愿意,你可以 也可以观看,它将如何匹配 对照一些样本输入



我的同事想出了一个解决方案
]+[^/]>[^
为…XML数据找到正确的正则表达式的问题实际上问题在于您首先尝试使用正则表达式来解析XML。请研究如何使用合适的XML解析器,让您的生活更轻松!感谢您的建议,但这不正是我想要的。这里的问题是我想要什么一个只使用正则表达式的方法。是否让我的生活更轻松是另一个问题/故事。如果正则表达式设计得很好,那么应该有一个解决方案,对吗?我认为您的模式可以简化为
]*>([^]*])]*>
请参见本部分中的
]*?)>
没有必要让量词变懒,因为它不能跨越
字符类。哦,对不起,我忘了在数据中包含一些非常重要的内容。谢谢大家。它非常接近。但是,它不起作用,因为我很抱歉忘记包含一些内容ng在数据中非常重要。还有一些没有文字的标记需要考虑。例如
$re = '/<([^>]*?)>(.*?)<(\s*\/[^>]*?)>/s';
$str = '<rdfs:label xml:lang="en">1969</rdfs:label>
<rdfs:label xml:lang="pt">1969</rdfs:label>
<rdfs:comment xml:lang="zh">请参看:
*  1969年电影
*  1969年文学
*  1969年音乐
*  1969年体育
*  1969年电视</rdfs:comment>
<dbo:abstract xml:lang="zh">请参看:
*  1969年电影
*  1969年文学
*  1969年音乐
*  1969年体育
*  1969年电视</dbo:abstract>
<dbo:abstract xml:lang="nl">Het jaar 1969 is een jaartal volgens de christelijke jaartelling.</dbo:abstract>
<dbo:abstract xml:lang="it">Il 1969 (MCMLXIX in numeri romani) è un anno del XX secolo.</dbo:abstract>';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

var_dump($matches);
array(6) {
  [0]=>
  array(4) {
    [0]=>
    string(43) "<rdfs:label xml:lang="en">1969</rdfs:label>"
    [1]=>
    string(24) "rdfs:label xml:lang="en""
    [2]=>
    string(4) "1969"
    [3]=>
    string(11) "/rdfs:label"
  }
  [1]=>
  array(4) {
    [0]=>
    string(43) "<rdfs:label xml:lang="pt">1969</rdfs:label>"
    [1]=>
    string(24) "rdfs:label xml:lang="pt""
    [2]=>
    string(4) "1969"
    [3]=>
    string(11) "/rdfs:label"
  }
  [2]=>
  array(4) {
    [0]=>
    string(140) "<rdfs:comment xml:lang="zh">请参看:
*  1969年电影
*  1969年文学
*  1969年音乐
*  1969年体育
*  1969年电视</rdfs:comment>"
    [1]=>
    string(26) "rdfs:comment xml:lang="zh""
    [2]=>
    string(97) "请参看:
*  1969年电影
*  1969年文学
*  1969年音乐
*  1969年体育
*  1969年电视"
    [3]=>
    string(13) "/rdfs:comment"
  }
  [3]=>
  array(4) {
    [0]=>
    string(140) "<dbo:abstract xml:lang="zh">请参看:
*  1969年电影
*  1969年文学
*  1969年音乐
*  1969年体育
*  1969年电视</dbo:abstract>"
    [1]=>
    string(26) "dbo:abstract xml:lang="zh""
    [2]=>
    string(97) "请参看:
*  1969年电影
*  1969年文学
*  1969年音乐
*  1969年体育
*  1969年电视"
    [3]=>
    string(13) "/dbo:abstract"
  }
  [4]=>
  array(4) {
    [0]=>
    string(108) "<dbo:abstract xml:lang="nl">Het jaar 1969 is een jaartal volgens de christelijke jaartelling.</dbo:abstract>"
    [1]=>
    string(26) "dbo:abstract xml:lang="nl""
    [2]=>
    string(65) "Het jaar 1969 is een jaartal volgens de christelijke jaartelling."
    [3]=>
    string(13) "/dbo:abstract"
  }
  [5]=>
  array(4) {
    [0]=>
    string(103) "<dbo:abstract xml:lang="it">Il 1969 (MCMLXIX in numeri romani) è un anno del XX secolo.</dbo:abstract>"
    [1]=>
    string(26) "dbo:abstract xml:lang="it""
    [2]=>
    string(60) "Il 1969 (MCMLXIX in numeri romani) è un anno del XX secolo."
    [3]=>
    string(13) "/dbo:abstract"
  }
}