#include <StringConstants.au3> ; to declare the Constants of StringRegExp
#include <Array.au3> ; UDF needed for _ArrayDisplay and _ArrayConcatenate
Local $sRegex = "(?xm)(?(DEFINE)" & @CRLF & _
" (?# Periodic elements )" & @CRLF & _
" (?<Hydrogen>H)" & @CRLF & _
" (?<Helium>He)" & @CRLF & _
" (?<Lithium>Li)" & @CRLF & _
" (?<Beryllium>Be)" & @CRLF & _
" (?<Boron>B)" & @CRLF & _
" (?<Carbon>C)" & @CRLF & _
" (?<Nitrogen>N)" & @CRLF & _
" (?<Oxygen>O)" & @CRLF & _
" (?<Fluorine>F)" & @CRLF & _
" (?<Neon>Ne)" & @CRLF & _
" (?<Sodium>Na)" & @CRLF & _
" (?<Magnesium>Mg)" & @CRLF & _
" (?<Aluminum>Al)" & @CRLF & _
" (?<Silicon>Si)" & @CRLF & _
" (?<Phosphorus>P)" & @CRLF & _
" (?<Sulfur>S)" & @CRLF & _
" (?<Chlorine>Cl)" & @CRLF & _
" (?<Argon>Ar)" & @CRLF & _
" (?<Potassium>K)" & @CRLF & _
" (?<Calcium>Ca)" & @CRLF & _
" (?<Scandium>Sc)" & @CRLF & _
" (?<Titanium>Ti)" & @CRLF & _
" (?<Vanadium>V)" & @CRLF & _
" (?<Chromium>Cr)" & @CRLF & _
" (?<Manganese>Mn)" & @CRLF & _
" (?<Iron>Fe)" & @CRLF & _
" (?<Cobalt>Co)" & @CRLF & _
" (?<Nickel>Ni)" & @CRLF & _
" (?<Copper>Cu)" & @CRLF & _
" (?<Zinc>Zn)" & @CRLF & _
" (?<Gallium>Ga)" & @CRLF & _
" (?<Germanium>Ge)" & @CRLF & _
" (?<Arsenic>As)" & @CRLF & _
" (?<Selenium>Se)" & @CRLF & _
" (?<Bromine>Br)" & @CRLF & _
" (?<Krypton>Kr)" & @CRLF & _
" (?<Rubidium>Rb)" & @CRLF & _
" (?<Strontium>Sr)" & @CRLF & _
" (?<Yttrium>Y)" & @CRLF & _
" (?<Zirconium>Zr)" & @CRLF & _
" (?<Niobium>Nb)" & @CRLF & _
" (?<Molybdenum>Mo)" & @CRLF & _
" (?<Technetium>Tc)" & @CRLF & _
" (?<Ruthenium>Ru)" & @CRLF & _
" (?<Rhodium>Rh)" & @CRLF & _
" (?<Palladium>Pd)" & @CRLF & _
" (?<Silver>Ag)" & @CRLF & _
" (?<Cadmium>Cd)" & @CRLF & _
" (?<Indium>In)" & @CRLF & _
" (?<Tin>Sn)" & @CRLF & _
" (?<Antimony>Sb)" & @CRLF & _
" (?<Tellurium>Te)" & @CRLF & _
" (?<Iodine>I)" & @CRLF & _
" (?<Xenon>Xe)" & @CRLF & _
" (?<Cesium>Cs)" & @CRLF & _
" (?<Barium>Ba)" & @CRLF & _
" (?<Lanthanum>La)" & @CRLF & _
" (?<Cerium>Ce)" & @CRLF & _
" (?<Praseodymium>Pr)" & @CRLF & _
" (?<Neodymium>Nd)" & @CRLF & _
" (?<Promethium>Pm)" & @CRLF & _
" (?<Samarium>Sm)" & @CRLF & _
" (?<Europium>Eu)" & @CRLF & _
" (?<Gadolinium>Gd)" & @CRLF & _
" (?<Terbium>Tb)" & @CRLF & _
" (?<Dysprosium>Dy)" & @CRLF & _
" (?<Holmium>Ho)" & @CRLF & _
" (?<Erbium>Er)" & @CRLF & _
" (?<Thulium>Tm)" & @CRLF & _
" (?<Ytterbium>Yb)" & @CRLF & _
" (?<Lutetium>Lu)" & @CRLF & _
" (?<Hafnium>Hf)" & @CRLF & _
" (?<Tantalum>Ta)" & @CRLF & _
" (?<Tungsten>W)" & @CRLF & _
" (?<Rhenium>Re)" & @CRLF & _
" (?<Osmium>Os)" & @CRLF & _
" (?<Iridium>Ir)" & @CRLF & _
" (?<Platinum>Pt)" & @CRLF & _
" (?<Gold>Au)" & @CRLF & _
" (?<Mercury>Hg)" & @CRLF & _
" (?<Thallium>Tl)" & @CRLF & _
" (?<Lead>Pb)" & @CRLF & _
" (?<Bismuth>Bi)" & @CRLF & _
" (?<Polonium>Po)" & @CRLF & _
" (?<Astatine>At)" & @CRLF & _
" (?<Radon>Rn)" & @CRLF & _
" (?<Francium>Fr)" & @CRLF & _
" (?<Radium>Ra)" & @CRLF & _
" (?<Actinium>Ac)" & @CRLF & _
" (?<Thorium>Th)" & @CRLF & _
" (?<Protactinium>Pa)" & @CRLF & _
" (?<Uranium>U)" & @CRLF & _
" (?<Neptunium>Np)" & @CRLF & _
" (?<Plutonium>Pu)" & @CRLF & _
" (?<Americium>Am)" & @CRLF & _
" (?<Curium>Cm)" & @CRLF & _
" (?<Berkelium>Bk)" & @CRLF & _
" (?<Californium>Cf)" & @CRLF & _
" (?<Einsteinium>Es)" & @CRLF & _
" (?<Fermium>Fm)" & @CRLF & _
" (?<Mendelevium>Md)" & @CRLF & _
" (?<Nobelium>No)" & @CRLF & _
" (?<Lawrencium>Lr)" & @CRLF & _
" (?<Rutherfordium>Rf)" & @CRLF & _
" (?<Dubnium>Db)" & @CRLF & _
" (?<Seaborgium>Sg)" & @CRLF & _
" (?<Bohrium>Bh)" & @CRLF & _
" (?<Hassium>Hs)" & @CRLF & _
" (?<Meitnerium>Mt)" & @CRLF & _
" (?<Darmstadtium>Ds)" & @CRLF & _
" (?<Roentgenium>Rg)" & @CRLF & _
" (?<Copernicium>Cn)" & @CRLF & _
" (?<Nihonium>Nh)" & @CRLF & _
" (?<Flerovium>Fl)" & @CRLF & _
" (?<Moscovium>Mc)" & @CRLF & _
" (?<Livermorium>Lv)" & @CRLF & _
" (?<Tennessine>Ts)" & @CRLF & _
" (?<Oganesson>Og)" & @CRLF & _
" (?# Regex )" & @CRLF & _
" (?<Element>(?&Actinium)|(?&Silver)|(?&Aluminum)|(?&Americium)|(?&Argon)|(?&Arsenic)|(?&Astatine)|(?&Gold)|(?&Barium)|(?&Beryllium)|(?&Bohrium)|(?&Bismuth)|(?&Berkelium)|(?&Bromine)|(?&Boron)|(?&Calcium)|(?&Cadmium)|(?&Cerium)|(?&Californium)|(?&Chlorine)|(?&Curium)|(?&Copernicium)|(?&Cobalt)|(?&Chromium)|(?&Cesium)|(?&Copper)|(?&Carbon)|(?&Dubnium)|(?&Darmstadtium)|(?&Dysprosium)|(?&Erbium)|(?&Einsteinium)|(?&Europium)|(?&Iron)|(?&Flerovium)|(?&Fermium)|(?&Francium)|(?&Fluorine)|(?&Gallium)|(?&Gadolinium)|(?&Germanium)|(?&Helium)|(?&Hafnium)|(?&Mercury)|(?&Holmium)|(?&Hassium)|(?&Hydrogen)|(?&Indium)|(?&Iridium)|(?&Iodine)|(?&Krypton)|(?&Potassium)|(?&Lanthanum)|(?&Lithium)|(?&Lawrencium)|(?&Lutetium)|(?&Livermorium)|(?&Moscovium)|(?&Mendelevium)|(?&Magnesium)|(?&Manganese)|(?&Molybdenum)|(?&Meitnerium)|(?&Sodium)|(?&Niobium)|(?&Neodymium)|(?&Neon)|(?&Nihonium)|(?&Nickel)|(?&Nobelium)|(?&Neptunium)|(?&Nitrogen)|(?&Oganesson)|(?&Osmium)|(?&Oxygen)|(?&Protactinium)|(?&Lead)|(?&Palladium)|(?&Promethium)|(?&Polonium)|(?&Praseodymium)|(?&Platinum)|(?&Plutonium)|(?&Phosphorus)|(?&Radium)|(?&Rubidium)|(?&Rhenium)|(?&Rutherfordium)|(?&Roentgenium)|(?&Rhodium)|(?&Radon)|(?&Ruthenium)|(?&Antimony)|(?&Scandium)|(?&Selenium)|(?&Seaborgium)|(?&Silicon)|(?&Samarium)|(?&Tin)|(?&Strontium)|(?&Sulfur)|(?&Tantalum)|(?&Terbium)|(?&Technetium)|(?&Tellurium)|(?&Thorium)|(?&Titanium)|(?&Thallium)|(?&Thulium)|(?&Tennessine)|(?&Uranium)|(?&Vanadium)|(?&Tungsten)|(?&Xenon)|(?&Ytterbium)|(?&Yttrium)|(?&Zirconium)|(?&Zinc))" & @CRLF & _
" (?<Num>(?:[1-9]\d*)?)" & @CRLF & _
" (?<ElementGroup>(?:(?&Element)(?&Num))+)" & @CRLF & _
" (?<ElementParenthesesGroup>\((?&ElementGroup)+\)(?&Num))" & @CRLF & _
" (?<ElementSquareBracketGroup>\[(?:(?:(?&ElementParenthesesGroup)(?:(?&ElementGroup)|(?&ElementParenthesesGroup))+)|(?:(?:(?&ElementGroup)|(?&ElementParenthesesGroup))+(?&ElementParenthesesGroup)))\](?&Num))" & @CRLF & _
")" & @CRLF & _
"^((?<Brackets>(?&ElementSquareBracketGroup))|(?<Parentheses>(?&ElementParenthesesGroup))|(?<Group>(?&ElementGroup)))+$"
Local $sString = "-- These entries are valid --" & @CRLF & _
"C" & @CRLF & _
"CH" & @CRLF & _
"CH3" & @CRLF & _
"O2" & @CRLF & _
"C2CH2H2" & @CRLF & _
"(CH)" & @CRLF & _
"(CH3)" & @CRLF & _
"(CH3NO4)" & @CRLF & _
"(CH3NO4)2" & @CRLF & _
"[CH3(NO4)]" & @CRLF & _
"[(NO4)CH]2" & @CRLF & _
"[(NO4)(CH3)]" & @CRLF & _
"(CH3)2CFCOO(CH2)2Si[NO3(CH3)2]2" & @CRLF & _
"" & @CRLF & _
"-- These entries are invalid --" & @CRLF & _
"N0" & @CRLF & _
"N01" & @CRLF & _
"A" & @CRLF & _
"c" & @CRLF & _
"(CH[NO4])" & @CRLF & _
"[(NO4)]" & @CRLF & _
"[NO4]" & @CRLF & _
"[NO4(CH])" & @CRLF & _
"(CH3)2CFCOO(CH2)2Si[NO3(CH3)2]2Cl[N2]"
Local $aArray = StringRegExp($sString, $sRegex, $STR_REGEXPARRAYGLOBALFULLMATCH)
Local $aFullArray[0]
For $i = 0 To UBound($aArray) -1
_ArrayConcatenate($aFullArray, $aArray[$i])
Next
$aArray = $aFullArray
; Present the entire match result
_ArrayDisplay($aArray, "Result")
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 AutoIt, please visit: https://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm