标签: backreference

正则表达式; 反向引用字符集中不匹配的字符

我想构造一个正则表达式,匹配任何一个'"然后匹配其他字符,当a '或a "分别匹配时结束,这取决于在开始时遇到的内容.所以这个问题看起来很简单,最后可以通过反向引用来解决; 下面是一些正则表达式代码(它在Java中,所以请注意额外的转义字符,例如\前面的"):

private static String seekerTwo = "(['\"])([a-zA-Z])([a-zA-Z0-9():;/`\\=\\.\\,\\- ]+)(\\1)";
Run Code Online (Sandbox Code Playgroud)

此代码将成功处理以下内容:

"hello my name is bob"
'i live in bethnal green'
Run Code Online (Sandbox Code Playgroud)

当我有这样的字符串时出现问题:

"hello this seat 'may be taken' already"
Run Code Online (Sandbox Code Playgroud)

使用上面的正则表达式会在遇到初始部分失败'然后它会继续并成功匹配'may be taken'...但这显然是不够的,我需要整个字符串匹配.

我在想的是,我需要一种方法来忽略引号的类型,它在第一组中不匹配,将它包含在第3组字符集中的字符中.但是,我知道无法做到这一点.是否存在某种偷偷摸摸的非反向引用功能?我可以用来引用第一组中不匹配的角色?或者以其他方式解决我的困境?

java regex logic backreference

7
推荐指数
1
解决办法
1709
查看次数

preg_replace:反向引用后添加数字

情况

我想在每个之后preg_replace()添加一个数字. '8'[aeiou]

abcdefghij
Run Code Online (Sandbox Code Playgroud)

a8bcde8fghi8j
Run Code Online (Sandbox Code Playgroud)


我该如何写替换字符串?

// input string
$in = 'abcdefghij';

// this obviously won't work ----------?
$out = preg_replace( '/([aeiou])/', '\18',  $in);
Run Code Online (Sandbox Code Playgroud)

只是一个例子,所以建议str_replace()不是一个有效的答案.
我想知道如何在替换字符串中的反向引用后有数字.

php regex backreference escaping

7
推荐指数
2
解决办法
2913
查看次数

Python - 修改反向引用。能做到吗?

Python新手,请原谅我的无知。我正在尝试修改正则表达式中的反向引用字符串。

例子:

>>>a_string
'fsa fad fdsa dsafasdf u.s.a. U.S.A. u.s.a fdas adfs.f fdsa f.afda'
>>> re.sub(r'(?<=\s)(([a-zA-Z]\.)+[a-zA-Z]\.{0,1})(?=\s)', '<acronym>'+re.sub(r'\.',r'',(r'\1').upper())+'</acronym>', a_string)
'fsa fad fdsa dsafasdf <acronym>u.s.a.</acronym> <acronym>U.S.A.</acronym> <acronym>u.s.a</acronym> fdas adfs.f fdsa f.afda'
Run Code Online (Sandbox Code Playgroud)

而不是我想要的输出:

'fsa fad fdsa dsafasdf <acronym>USA</acronym> <acronym>USA</acronym> <acronym>USA</acronym> fdas adfs.f fdsa f.afda'
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助。

python regex backreference

6
推荐指数
1
解决办法
717
查看次数

Java正则表达式错误 - 使用组引用进行后瞻

我正在尝试构建一个正则表达式中恰好匹配两次char的正则表达式.这是我制作的正则表达式:

(?<!\1)([^raol1c])\1(?!\1)
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,它使用了前瞻和后方的底片.但是,像往常一样,后者不起作用; 当它明显具有最大长度(恰好是一个字符)时,java抛出众所周知的异常"后视组没有明显的最大长度".

理想情况下,正则表达式应匹配"hh","jhh","ahh","hhj","hha"而不是"hhh".

有关如何处理此问题并制定解决方法的任何想法?

java regex backreference negative-lookbehind negative-lookahead

6
推荐指数
1
解决办法
561
查看次数

在perl正则表达式中单独的反向引用后跟数字文字

我发现了这个相关的问题:在perl中,替换文本中的反向引用后跟数值文字, 但它似乎完全不同.我有像这样的正则表达式

s/([^0-9])([xy])/\1 1\2/g
                   ^
              whitespace here
Run Code Online (Sandbox Code Playgroud)

但这个空白出现在替代中.

如果没有perl混淆反向引用,我怎么不在替换字符串中获取空格\11

例如. 15+x+y改变为15+ 1x+ 1y.我想得到15+1x+1y.

regex perl backreference

6
推荐指数
2
解决办法
1629
查看次数

捕获组的负向前瞻

我正在尝试这个挑战:

https://regex.alf.nu/4

我想匹配所有不包含ABBA模式的字符串.

比赛:

aesthophysiology
amphimictical
baruria
calomorphic
Run Code Online (Sandbox Code Playgroud)

不匹配

anallagmatic
bassarisk
chorioallantois
coccomyces
abba
Run Code Online (Sandbox Code Playgroud)

首先,我有一个正则表达式来确定ABBA模式.

(\w)(\w)\2\1
Run Code Online (Sandbox Code Playgroud)

接下来我想匹配不包含该模式的字符串:

^((?!(\w)(\w)\2\1).)*$
Run Code Online (Sandbox Code Playgroud)

然而,这符合一切.

如果我通过为负前瞻指定文字来简化这一点:

^((?!agm).)*$
Run Code Online (Sandbox Code Playgroud)

正则表达式与字符串"anallagmatic"不匹配,这是期望的行为.

因此看起来问题在于我在负向前瞻中使用捕获组和反向引用.

regex backreference regex-negation capturing-group regex-lookarounds

6
推荐指数
1
解决办法
3802
查看次数

正则表达式(正则表达式)是否经常有规律?

我理解正则表达式是如何得到它们的名字的,并且已经阅读了相关的问题(为什么正则表达式称为"常规"表达式?),但我仍然想知道正则表达式是否总是规则的.

例如,反向引用如何定期?这不需要一些内存,因此无法通过有限状态自动机匹配/生成吗?

regex grammar backreference regular-language finite-state-automaton

6
推荐指数
1
解决办法
310
查看次数

在R的正则表达式中是否有等效的"&"用于反向整个匹配

当我使用vim时,我经常使用&反向替换整个匹配.例如,以下内容将"foo"的所有实例替换为"foobar":

%s/foo/&bar/g
Run Code Online (Sandbox Code Playgroud)

这里的好处是懒惰:我不必在匹配中键入括号,我只需要为替换中的反向引用键入一个字符而不是两个字符.也许更重要的是,在我输入比赛时,我没有弄清楚我的背叛,减少了认知负担.

是否有一个等同于&我在R的正则表达式中使用vim(可能使用perl = T参数)?

regex backreference r capture-group

6
推荐指数
1
解决办法
101
查看次数

使用反向引用的字母顺序正则表达式

我最近遇到了一个难题,找到一个匹配的正则表达式:

5个字符长的字符串,由按字母顺序升序的小写英文字母组成

有效的例子包括:

aaaaa
abcde
xxyyz
ghost
chips
demos
Run Code Online (Sandbox Code Playgroud)

无效的示例包括:

abCde
xxyyzz
hgost
chps
Run Code Online (Sandbox Code Playgroud)

我目前的解决方案是kludgy.我使用正则表达式:

(?=^[a-z]{5}$)^(a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*)$
Run Code Online (Sandbox Code Playgroud)

它使用非消耗捕获组来断言字符串长度为5,然后验证该字符串是否按顺序包含小写英文字母(请参阅Rubular).

相反,我想在字符类中使用反向引用.就像是:

^([a-z])([\1-z])([\2-z])([\3-z])([\4-z])$
Run Code Online (Sandbox Code Playgroud)

我头脑中的解决方案(参见Rubular)的逻辑是捕获第一个字符[az],在第二个字符类中使用它作为backrefence,依此类推.然而\1,\2...字符类中似乎是指1,2,...,有效匹配任意四或五个字符的字符串的ASCII值.

我有两个问题:

  1. 我可以在我的角色类中使用反向引用来检查升序字符串吗?
  2. 对这个难题有什么不那么糟糕的解决方案吗?

regex backreference character-class

6
推荐指数
1
解决办法
195
查看次数

如何根据R中分隔符之间的出现替换字符串中的确切字符数

我有这样的文本字符串:

u <- "she goes ~Wha::?~ and he's like ~?Yeah believe me!~ and she's etc."
Run Code Online (Sandbox Code Playgroud)

我想要做的是将成对~分隔符(包括分隔符本身)之间出现的所有字符替换为X.

gsub方法用~单个替换-delimitor 对之间的子字符串X

gsub("~[^~]+~", "X", u)
[1] "she goes X and he's like X and she's etc."
Run Code Online (Sandbox Code Playgroud)

但是,我真正想做的是将分隔符(和分隔符本身)之间的每个字符替换为X. 所需的输出是这样的:

"she goes XXXXXXXXX and he's like XXXXXXXXXXXXXXXXXXX and she's etc."
Run Code Online (Sandbox Code Playgroud)

我一直在试验nchar,反向引用,paste如下,但结果不正确:

gsub("(~[^~]+~)", paste0("X{", nchar("\\1"),"}"), u)
[1] "she goes X{2} and he's like X{2} and she's etc."
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏。

regex backreference r

5
推荐指数
1
解决办法
78
查看次数