i usually run a query like (untested, sql server syntax, adjust as necessary for your db)
select left(c.label,35) as objectid, refObjects.typename, r.objectid as ruleObjectId from container c join container_aRules cr on c.objectid = cr.parentid join ruleForm r on cr.data = r.objectid left join refObjects on left(c.label,35) = refObjects.objectid;
That will give you a list of objectid's and the typename for objects that have (or had) a container with that rule, and the objectid of the rule.
If there is no typename value, then the object has probably been deleted since there was no record in refobjects. You could then call the delete() method for the rule for each ruleObjectId you want to delete.
Something like (untested):
<cfset oRule = application.fapi.getcontenttype("ruleForm") />
<cfloop query="q">
<cfif q.typename[q.currentrow] eq "">
<cfset oRule.delete(q.ruleObjectid[q.currentrow] />
</cfif>
</cfloop>
I would check that the page has been deleted first and be sure you actually want to remove those rules before deleting, but I hope you get the idea. Also this wont work for "global" containers. This will only match containers that have the ObjectID of the page in the label field.
ex: <con:container label="#stobj.objectid#_myContainerName" />
Good luck