Так Для этого Allow PosixPrint Characters except , % \ / # ? :
условие работает
с этим шаблоном регулярных выражений m/^[^\P{PosixPrint}\/\#\%\?\:\,\\]+$/x
Но для этого:
white-space at the beginning and end but allow in the middle
этот шаблон m/^\b[^\P{PosixPrint}\/\#\%\?\:\,\\]+\b$/x
является своего рода рабочим (см. вывод).
Строка не совпадает, если в начале и конце появляются символы, кроме [0-9a-zA-Z]
.
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my $vars = [
q#1#,
q#1~`!l#,
q#11#,
q#111#,
q#1 1#,
q# 11#,
q#11 #,
q# 11 #,
q# 1 1 #,
q#1`~!@$^&*()-_=+|]}[{;'".><1#,
q#1`~!@$^&*()-_=1#,
q#1~`!@$^&*()-_=+|]}[{;'".><#,
q#~`!@$^&*()-_=+|]}[{;'".><1#,
q#~`!@$^&*()-_=+|]}[{;'".><#,
];
foreach my $var (@$vars){
if ( $var =~ m/^\b[^\P{PosixPrint}\/\#\%\?\:\,\\]+\b$/x) {
print "match:\t\t#$var#\n";
}
else{
print "no match:\t#$var#\n";
}
}
ВЫХОД:
match: #1#
match: #1~`!l#
match: #11#
match: #111#
match: #1 1#
no match: # 11#
no match: #11 #
no match: # 11 #
no match: # 1 1 #
match: #1`~!@$^&*()-_=+|]}[{;'".><1#
match: #1`~!@$^&*()-_=1#
no match: #1~`!@$^&*()-_=+|]}[{;'".><#
no match: #~`!@$^&*()-_=+|]}[{;'".><1#
no match: #~`!@$^&*()-_=+|]}[{;'".><#
Ожидаемый ВЫХОД:
match: #1#
match: #1~`!l#
match: #11#
match: #111#
match: #1 1#
no match: # 11#
no match: #11 #
no match: # 11 #
no match: # 1 1 #
match: #1`~!@$^&*()-_=+|]}[{;'".><1#
match: #1`~!@$^&*()-_=1#
match: #1~`!@$^&*()-_=+|]}[{;'".><#
match: #~`!@$^&*()-_=+|]}[{;'".><1#
match: #~`!@$^&*()-_=+|]}[{;'".><#
Информация:
Perl Version: v5.26.2
Platform: Ubuntu 18.10