$re = '/port\s*\((.*?)(?:\)\s*;\s*\w)/s';
$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;';
preg_match($re, $str, $matches, PREG_OFFSET_CAPTURE, 0);
// Print the entire match result
var_dump($matches);
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 PHP, please visit: http://php.net/manual/en/ref.pcre.php