1) IP based vhosts
<VirtualHost 192.168.13.37>
ServerName example.com
DocumentRoot /var/www/domains/example.com/html
ErrorLog /var/log/example.com/error.log
CustomLog /var/log/example.com/access.log common
</VirtualHost>
<VirtualHost 192.168.47.11>
ServerName otherurl.com
DocumentRoot /srv/www/htdocs/otherurl.com/html
ErrorLog /var/log/otherurl.com/error.log
CustomLog /var/log/otherurl.com/access.log common
</VirtualHost>
Just change the port to your given IP(s). The port is irrelevant for the decision which vhost is chosen.
2) Multiple vhosts with the same Port
Since NameVirtualHost isn't needed anymore you can just write multiple vhosts with the same port.
<VirtualHost *:80>
DocumentRoot /srv/www/htdocs/otherurl.com/html
ErrorLog /var/log/otherurl.com/error.log
CustomLog /var/log/otherurl.com/access.log common
</VirtualHost>
<VirtualHost *:80>
ServerName example.com
ServerAlias ex1.com ex2.com
DocumentRoot /var/www/domains/example.com/html
ErrorLog /var/log/example.com/error.log
CustomLog /var/log/example.com/access.log common
</VirtualHost>
Here the opposite applies: the IP is irrelevant, but if the request is received on port 80 the name you entered is evaluated. Did you call ex1.com the 2nd vhost gets picked. And if you called any other url (like otherurl.com, but also example3.com) the first one will be picked. You can use this vhost as a 'fallback' if you will.
3) Defining vhosts using Macro (Apache2.4)
<Macro VHost $port $host>
<VirtualHost *:$port>
Servername $host
DocumentRoot /srv/www/htdocs/$host
ErrorLog /var/log/$host/error.log
</VirtualHost>
</Macro>
Use VHost 80 example.com
Use VHost 443 secure_example.com
Creates two vhosts, one for port 80, one for 443, and sets the used variables accordingly.