How can I find a substring within a string using Perl?
you need to capture it:
while ($pattern =~/(string(100|\d{1,2}))/g) {
print $1;
}
Explanation:
- the parentheses capture what's in them into $1. If you have more than one set of parens, the 1st captures into $1, the 2nd into $2 etc. In this case $2 will have the actual number.
- \d{1,2} captures between 1 and 3 digits, allowing you to capture between 0 and 99. The additional 100 there allows you to capture 100 explicitly, since it's the only 3-digit number you want to match.
edit: fixed the order of the numbers that are captured.
Abc.pl:
#!/usr/bin/perl -w
while(<>) {
while (/(string(\d{1,3}))/g) {
print "$1\n" if $2 <= 100;
}
}
Example:
$ cat Abc.txt
This is string1 this is string
This is string11
This is string6 and it is in this line
string1 asdfa string2
string101 string3 string100 string1000
string9999 string001 string0001
$ perl Abc.pl Abc.txt
string1
string11
string6
string1
string2
string3
string100
string100
string001
string000
$ perl -nE"say $1 while /(string(?:100|\d{1,2}(?!\d)))/g" Abc.txt
string1
string11
string6
string1
string2
string3
string100
string100
Note the difference between the outputs. What is preferable depends on your needs.