use strict;
my $str = 'entity pci_bfm is
generic (
G_INST_NAME : string := "PCI_BFM";
G_HANDLE_NO : rpciBfmHandleNo := 0;
G_IDSEL_POS_EXT_TARGET : idsel_pos := 30;
G_IDSEL_POS_INT_TARGET : idsel_pos := 29
) ;
port(
i_tb_stop : in boolean; -- Testbench global sto
o_clk : out std_logic; -- PCI clock.
o_rstn : out std_logic; -- PCI reset.
o_idsel : out std_logic; -- Initialization devic
i_reqn : in std_logic; -- Request. The reqn in
o_gntn : out std_logic; -- Grant. The gntn onpu
io_ad : inout std_logic_vector(31 downto 0); -- Address/data bus. Th
io_cben : inout std_logic_vector(3 downto 0); -- Command/byte enable.
io_par : inout std_logic; -- Parity. The par sign
io_framen : inout std_logic; -- Frame. The framen si
io_irdyn : inout std_logic; -- Initiator ready. The
io_devseln : inout std_logic; -- Device select. Targe
io_trdyn : inout std_logic; -- Target ready. The tr
io_stopn : inout std_logic; -- Stop. The stopn sign
io_perrn : inout std_logic; -- Parity error. The pe
i_serrn : in std_logic; -- System error. The se
i_intan : in std_logic; -- Interrupt A. The int
o_lockn : out std_logic -- Locked operations. R
) ;
generic (
G_INST_NAME : string := "PCI_BFM";
G_HANDLE_NO : rpciBfmHandleNo := 0;
G_IDSEL_POS_EXT_TARGET : idsel_pos := 30;
G_IDSEL_POS_INT_TARGET : idsel_pos := 29
) ;
end entity pci_bfm;';
my $regex = qr/port\s*\((.*?)(?:\)\s*;\s*\w)/sp;
if ( $str =~ /$regex/ ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html