Regex “如何打印”;“零宽度非连接件”;使用perl

Regex “如何打印”;“零宽度非连接件”;使用perl,regex,string,perl,bash,text,Regex,String,Perl,Bash,Text,我已经搜索过这个问题,但所有的讨论都围绕着如何从字符串中删除“零宽度非连接符”字符或用标准空格替换它。因此,我知道如何在给定的字符串中检测并删除它。 现在我的问题是如何用perl打印这个字符串?我知道如何在Python和ruby中实现,但在perl中不起作用。 在ruby中,我通常只通过以下方式实现: mystring.gsub!(/\s+/,'<200c>') 关键是我可以在Perl中检测到这个字符,但是我不能打印它。关于这个问题有什么想法吗?为了正确地编写包含utf8序列的字符

我已经搜索过这个问题,但所有的讨论都围绕着如何从字符串中删除“零宽度非连接符”字符或用标准空格替换它。因此,我知道如何在给定的字符串中检测并删除它。 现在我的问题是如何用perl打印这个字符串?我知道如何在Python和ruby中实现,但在perl中不起作用。 在ruby中,我通常只通过以下方式实现:

mystring.gsub!(/\s+/,'<200c>')

关键是我可以在Perl中检测到这个字符,但是我不能打印它。关于这个问题有什么想法吗?

为了正确地编写包含utf8序列的字符串,您应该在该流上使用
binmode()
。我建议您尝试的是
binmode(STDOUT,':utf8')然后打印字符串。
length($mystring)
函数可以帮助您判断字符串是否包含比可见字符更多的字符,并验证替换是否成功。

您需要什么输出,以及获得什么输出也许您应该查看一下。我尝试了
useopen':encoding(utf8)
,它似乎可以工作。我输入了一些文本,比如:ab{space}cd,我希望它像:ab{non-joiner space}cd。但我没有在两者之间获得非连接空间。取而代之的是,我得到了两个空格。我没有得到正确的长度,即使是原始文本。可能是因为我的字符串是波斯语字符,而不是英语。奇怪的是,如果我想用其他字符(比如X)替换空格,它就可以完美地工作。我对此没有任何问题。问题在于非joiner空间。目前我正在使用(使用编码“utf8”;)和(打开STDOUT),“您能提供一个示例字符串和perl发行版的版本号吗?我的perl版本是:v5.10.1。”
$mystring =~ s/\s+/\x{200C}/g;