Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式替换问题_Regex - Fatal编程技术网

Regex 正则表达式替换问题

Regex 正则表达式替换问题,regex,Regex,正则表达式是 (\w(s)\b) 示例词 Dress \1返回“连衣裙” \2返回“Dres” 所以我想: \1\2将返回“Dress Dres” 但它的回报是: "Dress s" 我怎样才能让它返回“Dress Dres”你误读了regex测试仪中的某些内容。实际上,\1等于ss,\2等于s。这是因为您只匹配了两个字符,\w和s。即使您在\w(即(\w+(s)\b))中添加了一个1+量词,您仍然可以匹配Dress和s,因为第二个捕获组实际上只是捕获s 如果你稍微移动一下这些捕

正则表达式是

(\w(s)\b)
示例词

Dress
  • \1返回“连衣裙”
  • \2返回“Dres”
所以我想:

  • \1\2将返回“Dress Dres”
但它的回报是:

"Dress s"

我怎样才能让它返回“Dress Dres”

你误读了regex测试仪中的某些内容。实际上,
\1
等于
ss
\2
等于
s
。这是因为您只匹配了两个字符,
\w
s
。即使您在
\w
(即
(\w+(s)\b)
)中添加了一个1+量词,您仍然可以匹配
Dress
s
,因为第二个捕获组实际上只是捕获
s


如果你稍微移动一下这些捕获组,你就可以成功地捕获“Dress”和“Dres”。请注意,您可以使用
\0
获得整个正则表达式匹配,因此这里不需要嵌套的捕获组

匹配:
(\w+)s\b

替换:
\0\1


Dress Dres

首先,使用带有
\w
+
量词来匹配一个或多个单词字符(您仅将一个与
\w
匹配)。这就是为什么您只得到
s
s
(请参见将
ss
捕获为组1和
s
捕获为组2)

和使用:

(\w+)s\b
使用
\0\1
替换,其中
\0
反向引用整个匹配,而
\1
反向引用使用
(\w+)
捕获的内容。看

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


请参见

请提供在中使用正则表达式的语言。