正则表达式替换问题

时间:2016-01-05 21:42:08

标签: regex

https://www.myregextester.com/?r=6fba8b94

正则表达式

class RotatableImageButton: UIButton {
    override func layoutSubviews() {
        let originalTransform = imageView?.transform
        imageView?.transform = CGAffineTransformIdentity
        super.layoutSubviews()
        if let originalTransform = originalTransform {
            imageView?.transform = originalTransform
        }
    }
}

示例Word

(\w(s)\b)
  • \ 1返回"着装"
  • \ 2返回" Dres"

所以我想:

  • \ 1 \ 2将返回" Dress Dres"

但它返回:

Dress

如何让它返回" Dress Dres"

2 个答案:

答案 0 :(得分:3)

你在那个正则表达式测试中误读了一些东西。实际上,\1等于ss\2等于s。这是因为您只匹配两个字符\ws。即使您向\w添加了1 +量词(即(\w+(s)\b)),您仍然只匹配Dresss,因为第二个捕获组是字面上只是捕获s

如果您稍微移动一些捕捉组,您可以成功捕捉" Dress"和#34; Dres"。快速说明一下,您可以将整个正则表达式与\0匹配,这样嵌套的捕获组在这里就没有必要了。

匹配: (\w+)s\b

替换: \0 \1

Output:着装Dres

答案 1 :(得分:2)

首先,使用+量词与\w匹配一个或多个单词字符(您只匹配1与\w)。这就是为什么你只得到ss(请your regex in actionss称为第1组,将s作为第2组)。

并使用:

(\w+)s\b

\0 \1替换,其中\0反向引用整个匹配,\1反向引用(\w+)捕获的内容。请参阅demo here

或者,如果是Perl,请使用((\w+)s)\b并替换为\1 \2(请参阅demo)。

请参阅demo