标签: backreference

RewriteCond%{QUERY_STRING}出现问题,后向引用未在最终到达网址中显示

我的.htaccess文件中有以下内容:

RewriteCond %{QUERY_STRING} ^route\=product\/category\&path\=35\&page\=([0-9]+)$
RewriteRule ^index\.php$ http://%{HTTP_HOST}/product/category/35/page_$1? [R=301,L]
Run Code Online (Sandbox Code Playgroud)

当我输入URL时,它的行为并不像预期的那样:

http://example.com/index.php?route=product/category&path=35&page=2
Run Code Online (Sandbox Code Playgroud)

它被重写为:

http://example.com/product/category/35/page_
Run Code Online (Sandbox Code Playgroud)

有人能告诉我,我做错了吗?

谢谢,

eb_dev

mod-rewrite backreference query-string

4
推荐指数
1
解决办法
7447
查看次数

为什么不创建反向引用?

我理解将?:正则表达式括号的开头放在内部将阻止它创建一个应该更快的反向引用.我的问题是,为什么这样做?速度是否足够明显以保证这一考虑?在什么情况下它会如此重要,以至于每次你不打算使用它时都需要仔细跳过反向引用.另一个缺点是它使正则表达式更难阅读,编辑和更新(如果你最后想要使用反向引用).

总而言之,为什么不打算不创建反向引用呢?

regex backreference

4
推荐指数
2
解决办法
4479
查看次数

匹配数字中的增量数字

谷歌搜索了很多天关于这个问题,最后我在这里发布这个问题,并希望专家在这里解决; 我正在寻找可以匹配增量反向引用的正则表达式模式.让我解释:

对于数字9422512322,模式(\d)\1将匹配22两次,我想要匹配的模式(类似(\d)\1+1)12(second digit等于first digit + 1)

总之模式应该匹配像所有的发生12,23,34,45,56,等等......有没有更换,只是需要相匹配.

regex backreference capturing-group

4
推荐指数
1
解决办法
326
查看次数

如何在反向引用上应用函数?

说我有以下字符串:

old_string = "I love the number 3 so much"
Run Code Online (Sandbox Code Playgroud)

我想发现整数(在上面的例子中,只有一个数字3),并用一个大于1的值替换它们,即,期望的结果应该是

new_string = "I love the number 4 so much"
Run Code Online (Sandbox Code Playgroud)

在Python中,我可以使用:

r = re.compile(r'([0-9])+')
new_string = r.sub(r'\19', s)
Run Code Online (Sandbox Code Playgroud)

9在匹配的整数数字的末尾追加一个.但是,我想申请更一般的内容\1.

如果我定义一个函数:

def f(i):
    return i + 1
Run Code Online (Sandbox Code Playgroud)

我该如何申请f()\1,这样我可以在更换匹配的字符串old_string喜欢的东西f(\1)

python regex backreference function

4
推荐指数
1
解决办法
314
查看次数

你能在正则表达式的模式部分使用反向引用吗?

有没有办法在正则表达式模式中支持引用?

示例输入字符串:

Here is "some quoted" text.
Run Code Online (Sandbox Code Playgroud)

假设我想拉出引用的文本,我可以创建以下表达式:

"([^"]+)"
Run Code Online (Sandbox Code Playgroud)

这个正则表达式会匹配some quoted.

说我希望它也支持单引号,我可以将表达式更改为:

["']([^"']+)["']
Run Code Online (Sandbox Code Playgroud)

但是,如果输入字符串混合了引号,说Here is 'some quoted" text.我不希望正则表达式匹配.目前第二个例子中的正则表达式仍然匹配.

我想能做的是如果第一个报价是双引号,那么收盘报价必须是双倍.如果开始报价是单引号,则结束报价必须是单引号.

我可以使用后退参考来实现这一目标吗?


我的另一个相关问题:使用正则表达式在引号之间获取文本

php regex backreference

3
推荐指数
1
解决办法
3644
查看次数

使用 sed 正则表达式分组替换字符

我有一个像这样的文本文件:

FOO BAR PIPPO PLUTO 31337 1010
FOOZ BAZ 130
VERY LONG LINE LIKE THIS THEN A NUMBER LIKE 42
Run Code Online (Sandbox Code Playgroud)

我需要把它变成:

FOO-BAR-PIPPO-PLUTO 31337 1010
FOOZ-BAZ 130
VERY-LONG-LINE-LIKE-THIS-THEN-A-NUMBER-LIKE 42
Run Code Online (Sandbox Code Playgroud)

我能做的最好的事情是:

sed -re 's/([A-Z]+)( )([A-Z]+)/\1-\3/g'
Run Code Online (Sandbox Code Playgroud)

但输出是

FOO-BAR PIPPO-PLUTO 31337 1010
FOOZ-BAZ 130
VERY-LONG LINE-LIKE THIS-THEN A-NUMBER LIKE 42
Run Code Online (Sandbox Code Playgroud)

接近,但没有雪茄。知道为什么我的正则表达式不起作用吗?

regex grouping backreference sed

3
推荐指数
1
解决办法
4932
查看次数

Regexp:如何匹配没有重复3次字符的字符串?

我正在尝试制作一个验证输入字符串的模式.验证规则不允许任何字符连续重复3次.

例如:

Aabcddee - 已验证.

Aabcddde-是不是有效的,因为3个d chracters.

目标是提供一个可以匹配上述示例之一的RegExp模式,但不能同时匹配两者.我知道我可以使用反向引用,([a-z])\1{1,2}但这只匹配顺序字符.我的问题是我无法弄清楚如何为此制作单一模式.我尝试过这个,但我不明白为什么它不起作用:

^(([a-z])\1{1,2})+$

在这里,我尝试匹配在内部组中重复1或2次的任何字符,然后如果它重复多次,则匹配该内部组.但它不是这样的.

谢谢.

regex backreference pcre

3
推荐指数
1
解决办法
1268
查看次数

正则表达式反向引用 findall 不起作用

我最近在程序中使用正则表达式。在这个程序中,我使用它们在单词列表中查找与某个 RE 匹配的单词。然而,当我尝试使用这个程序进行反向引用时,我得到了一个有趣的结果。

这是代码:

import re
pattern = re.compile(r"[abcgr]([a-z])\1[ldc]")
string = "reel reed have that with this they"
print(re.findall(pattern, string))
Run Code Online (Sandbox Code Playgroud)

我期望的是结果(当我将它与Pythex["reel","reed"]一起使用时,正则表达式与这些匹配)

但是,当我使用 python 运行代码(我使用 3.5.1)时,我得到以下结果:

['e','e']

请对 RE 有更多经验的人解释一下为什么我会遇到这个问题以及我可以采取什么措施来解决它。

谢谢。

python regex backreference findall python-3.x

3
推荐指数
1
解决办法
809
查看次数

Spark DataFrame `regexp_replace` 中的反向引用

我最近试图回答一个问题,当我意识到我不知道如何在 Spark DataFrames 的正则表达式中使用反向引用。

例如,使用 sed,我可以做到

> echo 'a1
b22
333' | sed "s/\([0-9][0-9]*\)/;\1/"                                                                                                   

a;1
b;22
;333
Run Code Online (Sandbox Code Playgroud)

但是使用 Spark DataFrames 我不能:

val df = List("a1","b22","333").toDF("str")
df.show

+---+
|str|
+---+
| a1|
|b22|
|333|
+---+

val res = df  .withColumn("repBackRef",regexp_replace('str,"(\\d+)$",";\\1"))
res.show

+---+-----------+
|str|repBackRef|
+---+----------+
| a1|       a;1|
|b22|       b;1|
|333|        ;1|
+---+----------+
Run Code Online (Sandbox Code Playgroud)

澄清一下:我不想要这种特殊情况下的结果,我想要一个与反向引用一样通用的解决方案,例如,sed.

还要注意 usingregexp_extract是缺乏的,因为它在没有匹配时表现不佳:

val res2 = df
  .withColumn("repExtract",regexp_extract('str,"^([A-z])+?(\\d+)$",2))
res2.show
Run Code Online (Sandbox Code Playgroud)

这样您就被迫像我在上述答案中所做的那样,对每个模式使用一列进行提取。

谢谢!

regex backreference scala apache-spark spark-dataframe

3
推荐指数
1
解决办法
2986
查看次数

R:正则表达式捕获给定字符后的所有实例

给定字符串ab cd ; ef gh ij,如何删除第一个空格之后的所有空格;,即ab cd ; efghij?我尝试使用\K但无法让它完全工作。

test = 'ab cd  ; ef  gh ij'
gsub('(?<=; )[^ ]+\\K +','',test,perl=T)
# "ab cd  ; efgh ij"
Run Code Online (Sandbox Code Playgroud)

regex backreference pcre r

3
推荐指数
1
解决办法
105
查看次数