Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.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 Perl兼容的正则表达式,用于选择除第二个单词以外的所有内容_Regex_Perl_Drupal_Pcre - Fatal编程技术网

Regex Perl兼容的正则表达式,用于选择除第二个单词以外的所有内容

Regex Perl兼容的正则表达式,用于选择除第二个单词以外的所有内容,regex,perl,drupal,pcre,Regex,Perl,Drupal,Pcre,我尝试使用PCRE来选择文本行中除第一个数字字符串以外的所有内容。数字字符串可以是3、4或5位数,但始终是冠词后的第二个单词。以下是一些例子: 第11367条航空公司专家仁川机场向印度尼西亚转让运营专业知识 第8364条未来投资韩国政府投资4万亿韩元科技ict研发 第2151条战斗机采购洛克希德·马丁公司可提议降低f 35的价格 我目前正在使用表达式\b(?=\w*[a-zA-Z])\w+\b。这将选择除数字以外的所有内容。这几乎是完美的,但正如您在上面的第2行和第3行中所看到的,有时数字出现在

我尝试使用PCRE来选择文本行中除第一个数字字符串以外的所有内容。数字字符串可以是3、4或5位数,但始终是冠词后的第二个单词。以下是一些例子:

第11367条航空公司专家仁川机场向印度尼西亚转让运营专业知识

第8364条未来投资韩国政府投资4万亿韩元科技ict研发

第2151条战斗机采购洛克希德·马丁公司可提议降低f 35的价格

我目前正在使用表达式
\b(?=\w*[a-zA-Z])\w+\b
。这将选择除数字以外的所有内容。这几乎是完美的,但正如您在上面的第2行和第3行中所看到的,有时数字出现在第一组之后。我希望选择除第二个之外的每个单词,或者忽略第一组数字,但包括其他数字,以便最终匹配结果如下所示:

第条航空公司专家仁川机场向印度尼西亚转让运营专业知识

文章未来投资韩国政府投资4万亿韩元科技ict研发

第三条洛克希德·马丁公司能够提出更低的f 35战斗机采购价格

我这样做是因为Drupal模块search404在其配置中包含一个PCRE字符串,该字符串选择要从搜索字符串中删除的所有内容。它还包括一个自动使用搜索词执行自定义搜索URL的功能,并允许您构造URL。我想构造URL,使其看起来像/node/number,它会自动将用户从旧文章URL(上面的一行)发送到新文章URL。

Update 如果确定数字位于第二位,请使用
\K

^\S+\s+|\G(?!^)\d+\K|\G(?!^).*$
^\S+\s+\K\d+
替换为
空字符串
。请参阅演示



原职 如果确定数字位于第二位,请使用
\K

^\S+\s+|\G(?!^)\d+\K|\G(?!^).*$
^\S+\s+\K\d+
替换为
空字符串
。请参阅演示


这些字符串首先是如何进入URL的?它们是否真的包含空格(编码为
%20
)?URL在到达正则表达式之前被处理,到那时,空格没有编码,它们只是空格。这将只删除数字,这是OP想要保留的唯一部分。我正试图实现与此完全相反的目标。不要选择数字,选择其他所有内容。如果成功,+1。工作答案决不能被否决,被接受的答案决不能被设计否决。@Stribizev:否决票是我的,这是因为这个解决方案的原始形式根本不是一个解决方案。看我的comment@vks:请记住,堆栈溢出不是论坛。如果你想在发布垃圾答案后再尝试一次,我一点也不确定这里的最佳实践应该是什么。我的第一个猜测是,如果你的新解决方案有很大不同,你应该写一篇新文章。你是否应该删除原件取决于它是否对任何人有用