问题标签 [backreference]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1981 浏览

ruby - gsub 中的反斜杠(转义和反向引用)

考虑以下代码段:

这打印(如在 ideone.com 上看到的):

这非常令人惊讶,因为我希望看到这样的东西:

我的论点是这\是一个转义字符,所以你写\\得到一个文字反斜杠,因此\\0是一个文字反斜杠\0等等。显然这不是gsub解释它的方式,所以有人可以解释发生了什么吗?

我该怎么做才能得到我想要的替换?

0 投票
1 回答
1729 浏览

regex - 正则表达式:如何用字符串文字“\1”替换?

我有一个字符串,比如说r"a"。我想r"a"用字符串替换 every r"\1",但我的正则表达式引擎不理解这一点。

我试过了:

  • r"\1"-- 崩溃(无法匹配第 1 组,因为没有第 1 组)
  • r"\\1"-- 崩溃(不知道为什么)

这是我的(专有)正则表达式引擎的限制,还是一般问题?有没有优雅的解决方法?(例如,我可以用“/1”替换“a”,然后用 StrReplace(“/”, r"\" )...但这不好

0 投票
1 回答
1370 浏览

regex - RegEx 修改反向引用的值

有没有办法修改反向引用的值?

示例:在以下文本中

应该通过反向引用提取单词“test”并插入到另一个文本中。

正则表达式:

替代品:

到目前为止效果很好。但现在的问题是,是否可以在插入之前修改反向引用。类似于将单词“test”转换为大写。

我认为它可能看起来像:

正则表达式的“标准”(是否有任何标准?)中是否有定义?

0 投票
3 回答
312 浏览

php - 空的反向引用导致 PHP 中的匹配失败......有解决方法吗?

我在 PHP 中使用可能为空的反向引用的正则表达式遇到问题。我希望它会按照http://www.regular-expressions.info/brackets.html中的说明工作:

如果在特定的匹配尝试中未使用反向引用(例如在第一个示例中,问号使第一个反向引用可选),则它只是空的。在正则表达式中使用空的反向引用非常好。它只会被虚无所取代。

然而,PHP 似乎有点不同......来自http://php.net/manual/en/regexp.reference.back-references.php

如果子模式实际上没有在特定匹配中使用,那么对它的任何反向引用总是会失败。

作为一个简化的例子,我想用这个正则表达式匹配以下两件事:

  • {某事} ... {/某事}
  • {something:else} ... {/something:else}

其中“某事”是提前知道的,而“其他”可以是任何东西(或什么都没有)。

所以我尝试了以下正则表达式(为简单起见,硬编码“else”):

不幸的是 if (:else)? 不匹配,\2 反向引用失败。如果我将 \2 设为可选 (\2?),那么我可能会匹配 {something} ... {something:else},这并不好。

我是否遇到了正则表达式的限制(臭名昭著的“你需要一个解析器,而不是一个正则表达式”)还是可以修复?

测试程序:

0 投票
1 回答
680 浏览

javascript - 使用反向引用的 javascript 模式替换不起作用

在哪里工作正常

工作

有什么想法吗???

注意

也工作正常

0 投票
3 回答
1420 浏览

regex - Can one use named backreference's in Apache mod_rewrite

All,

I've come across an interesting little quirk in one of my RewriteRules, which I wanted to resolve by the use of named back references. However from what I can see, this is not possible in Apache's mod_rewrite.

I have two incoming urls, each containing a key variable, which need to be rewritten to the same underlying framework action.

Incoming urls:

Desired rewrite endpoint

/?module=users&action=list&pagenum=2

I would have liked to do something like this

RewriteRule ^/(?P<module>([\w]+))/(?P<action>([\w]+))/(page-)?(?P<pagenum>([\d]+))$ /?module=${module}&action=${action}&pagenum=${pagenum} [L,QSA]

However Apache just doesn't want to play like that at all, and gives me null values in the places of the named backreferences. To get me round the problem I've used numerical references to the captured groups ($1, $2, $4)(but I'm almost halfway to the N=9 apache limit). So this isn't a show stopper for me.

I would just like to know, if named backreferences are available in Apache's mod_rewrite, and if they are, why does my RewriteRule's pattern not match?

Thanks, Ian

0 投票
1 回答
2605 浏览

mysql - MySQL REGEXP 中的负反向引用

MySQL 手册对它支持的表达式不是很详细,所以我不确定 MySQL 是否可以实现以下操作。

我正在尝试使用与以下内容匹配的 RLIKE 创建一个查询。

任务是从 SQL 中获取至少包含给定句子中任意两个单词的所有句子。

比方说,我在正则表达式中有一些特定的词要使用:

我在数据库中有以下句子:

从那些我只想匹配的

现在我有这样的:

问题是 - 我也得到了那些不需要的

所以我想,我需要在第二个 (hello|dog) 之前进行反向引用。

在伪代码中,它看起来像这样:

所以它可能是这样的:

可以在 MySQL 正则表达式中完成这种负反向引用吗?或者也许有一些更好的方法来编写做同样事情的正则表达式,但也考虑到查询将由一些 C++ 代码生成,所以生成它不应该太复杂?

0 投票
3 回答
2207 浏览

php - 如何在 php 中查找、增加和替换?

我在表单中有字符串,\d+_\d+我想在第二个数字上加 1。既然我的解释很清楚,让我举几个例子:

  • 1234567_2 应该变成 1234567_3
  • 1234_10 应该变成 1234_11

这是我的第一次尝试:

这会导致语法错误:

解析错误:语法错误,意外的 T_LNUMBER,在第 201 行的 [...] 中需要 T_VARIABLE 或 '$'

这是我的第二次尝试

这会将 $old = 1234567_2 转换为 $new = 1234567_1,这不是想要的效果

我的第三次尝试

这会产生相同的结果。

通过这些尝试,我意识到我不明白新的 $1、$2、$3、.. 变量是如何真正起作用的,所以我真的不知道还能尝试什么,因为这些变量似乎在退出时不再存在preg_replace 函数...

有任何想法吗?

0 投票
5 回答
9373 浏览

regex - 绕过 sed 反向引用限制 \1 到 \9

sed 手册明确指出,可用于替换字符串的可用反向引用编号为 \1 到 \9。我正在尝试解析一个包含 10 个字段的日志文件。

我已经为它形成了正则表达式,但第十场比赛(以及之后的任何比赛)都无法访问。

有没有人有一种优雅的方式来规避 KSH(或任何我可以移植到 shell 脚本的语言)中的这种限制?

0 投票
2 回答
1160 浏览

regex - 如何从正则表达式嵌套反向引用中获取内部值

我通过以下方式从服务器接收输入(示例输入数据):

我必须匹配输入并基于匹配,创建一个带有 value 的变量hostname-eventname

我的正则表达式

我想在引用变量中分别显示主机和事件的名称,例如$2or $3

例如,考虑这个输入:

<hostname-eventname>我需要根据从上面的匹配中获取的主机名和事件名创建一个名称的变量。

说,

我不能再应用任何拆分操作。所以没有编程:我只能读取输入数据。是的,正则表达式是 Perl 正则表达式类型。

我不知道我是否澄清了我的问题?