【问题标题】:How to negate specific word in regex如何否定正则表达式中的特定单词
【发布时间】:2020-04-20 08:41:41
【问题描述】:

我有一个字符串,格式为:keyword/page-XXX(以page-XXX结尾,可以为空)

keyword 是任意字符。斜杠前的所有字符都是关键字。但是关键字可以有斜线。关键字可以是page-XXX

XXX是任意数字

page-XXX正在分页)

我想使用正则表达式来获取关键字的值。怎么做?

例如:

字符串是:I-Like-PHP/page-123/page-456/page-789 => 关键字的值为 I-Like-PHP/page-123/page-456

字符串是:I-Like-PHP => 关键字值 I-Like-PHP

字符串是:I-Like-PHP/ => 关键字值 I-Like-PHP/ (有斜线)

字符串是:I-Like-PHP/page-123 => 关键字值 I-Like-PHP

字符串是:page-123 => 关键字是 page-123

字符串是:page-123/ => 关键字是 page-123/

如何仅使用正则表达式获得它?

【问题讨论】:

  • 第一个斜杠之前的第一个值总是关键字?
  • 你试过 php.ini 中的 stripslashes 函数了吗?它可以删除斜线
  • $arr = explode("/", $string); $first = $arr[0]; explode 返回一个数组,第一部分将保存在数组中
  • 应用多个正则表达式的问题在哪里?它可以更高效,以后更容易阅读。
  • 什么意思?关键字是任何字符。斜杠前的所有字符都是关键字。但是关键字可以有斜线。并且关键字可以是page-XXX 并且只需要使用正则表达式,而不是使用PHP来解析字符串

标签: php regex


【解决方案1】:

您可以使用这个正则表达式,如果没有分页,它会捕获直到尾随 /page-XXX 或行尾的所有内容:

^(.*?)(?=\/page-\d+$|$)

Demo on regex101

【讨论】:

  • 嗨,关键字是任意字符。斜杠前的所有字符都是关键字。但是关键字可以有斜线。并且关键字不能是 page-XXX 如果字符串是“page-123”,您的正则表达式仍然是数学运算
  • @GracePeterson 你没有在你的问题中说清楚。您能否在其中添加这样的最终案例。
  • @GracePeterson 在您的问题中,您声明“我有一个格式为:keyword/page-XXX 的字符串”,那么它怎么可能只是“page-123”?
  • @GracePeterson 看来你已经改变了问题,所以关键字 canpage-XXX 在这种情况下我认为这个答案有效。
【解决方案2】:

如果你只需要关键字,请试试这个

$str = 'I-Like-PHP/page-123/page-456/page-789';
preg_match('([^/]+)',$str,$matches);
print_r($matches[0]);die;

这只会给你

I-Like-PHP

【讨论】:

  • 它只需要正则表达式:)
  • 这不是正则表达式?
  • 您正在使用 PHP 替换 page-XXX 然后获取关键字。但我需要使用正则表达式来计算关键字。并注意关键字可以是page-XXX
猜你喜欢
  • 1970-01-01
  • 2010-11-17
  • 1970-01-01
  • 2021-04-20
  • 1970-01-01
  • 1970-01-01
  • 2021-04-20
  • 1970-01-01
相关资源
最近更新 更多