bool OESmartsLexReplace(std::string &smarts,
                        const std::vector<std::pair<std::string,std::string> > &bindings)

Replaces all the instances of $varname in the SMARTS pattern smarts with the variables as defined by the mapping in bindings.

The following code demonstrates how to use SmartsLexReplace.

#include <openeye.h>
#include <oeplatform.h>
#include <oesystem.h>
#include <oechem.h>

using namespace std;
using namespace OEPlatform;
using namespace OESystem;
using namespace OEChem;

int main()
  OEGraphMol mol;
  OESmilesToMol(mol, "c1ccccc1Cl chlorobenzene");

  const vector<pair<string, string> > bindings = { make_pair("halogen", "[$smallhals,$largehals]"),
                                                   make_pair("smallhals", "[F,Cl]"),
                                                   make_pair("largehals", "[Br,I]")};

  string smarts("c[$halogen]");
  OESmartsLexReplace(smarts, bindings);
  OEThrow.Info("SMARTS = %s", smarts.c_str());

  OESubSearch subsrch(smarts.c_str());

  OEPrepareSearch(mol, subsrch);
  if (subsrch.SingleMatch(mol))
    OEThrow.Info("Match to %s", mol.GetTitle());

  return 0;

The output of the above code snippet is the following:

SMARTS = c[$([$([F,Cl]),$([Br,I])])]
Match to chlorobenzene