<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/60991>60991</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            libc++ std::regex and std::regex_match very slow, ~10x slower than libstdc++
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          raidenluikang
      </td>
    </tr>
</table>

<pre>
    I searched for issues but didn't find anything like it.

Let https://godbolt.org/z/o5Wx9x3Gq

```
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctre.hpp>

#include <string_view>
#include <regex>
#include <chrono>
#include <string>
#include <vector>

bool is_valid_email_ctre (const std::string& email)
{
 return (bool)ctre::match<R"rx((?:(?:[^<>()\[\].,;:\s@"]+(?:\.[^<>()\[\].,;:\s@"]+)*)|".+")@(?:(?:[^<>()\[\].,;:\s@"]+\.)+[^<>()\[\].,;:\s@"]{2,}))rx">(email);
}

bool is_valid_email(const std::string& email) 
{
    static const std::regex rx{R"rx((?:(?:[^<>()\[\].,;:\s@"]+(?:\.[^<>()\[\].,;:\s@"]+)*)|".+")@(?:(?:[^<>()\[\].,;:\s@"]+\.)+[^<>()\[\].,;:\s@"]{2,}))rx"};
 return std::regex_match(email, rx);
}
//......
```

Clang libc++ output:

```
STD: less_valid = 1  upp_valid = 1
CTRE: less_valid = 1  upp_valid = 1
STD: valid_count = 4291
STD: elapsed time = 1.147848643
STD: is_valid_email took 11478 nanoseconds
CTRE: valid_count = 4291
CTRE: elapsed time = 0.038445505
CTRE: is_valid_email took 384 nanoseconds
```


GCC libstdc++ output:

```
STD: less_valid = 1  upp_valid = 1
CTRE: less_valid = 1  upp_valid = 1
STD: valid_count = 4245
STD: elapsed time = 0.116426089
STD: is_valid_email took 1164 nanoseconds
CTRE: valid_count = 4245
CTRE: elapsed time = 0.010598227
CTRE: is_valid_email took 105 nanoseconds

```

libc++  STD: elapsed time = 1.147848643 s   vs libstdc++ STD elapsed time =  0.116426089,  - which 9.86  times slower.




</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsVk1v4zgP_jXyhaghU_48-NDYzeAF3tNMgT0W_lBjbR0pK8lpuof97QvJaSdJ42l3MIc9bGAotkg-pPlQNBtjxEZyXpJkRZI6aCY7KF3qRvRcjpN4auQmaFX_Uv4PDG90N_AeHpUGYczEDbSThV70kmBm4VHIHhr5YgchNzCKJw7ChoTWhN7O6_-5hcHanSHsluCa4Hqj-laNNlR6Q3D9J8G1Sn47FAf25Y9TQ5LS4zU_IhOyG6eeA2GVsVrITTgQdndd3Av1I-ko2kWxFVu-KOys5uGw230XL0b3sBf8eQFG8w0_LLkYtJJqMXYHvSDc884qfRFaq9QIwjzsm1H0D3zbiPHBvQUQzDsljQVje0cOuz2CYwpejWBxBMpW8w1obictnamDJVg4pNl429huIKz6ShD1gWDuLrb2tL_euIq7I6xyITqFgiSV36xIUocEK8JWXq8yJKYEkSQ1wdUJQBX-PEhB8NatWUUQQ7-F7tkp_bJQXYTO0-rnELIVOklWe5DCJRJngDdK2OqVlfoDnj_DMFxSDADGNlZ0cGHraxb0gWSr_zj-5Rxn9Ruxr6fsPPMP8wF7K4TKUXG1HHyXDf3veiv1azU2vmW3nc_SCtRkd5N1Hpe78Lf7mrBbGLk5FhoQVkMEMO12pxtHF_df7_6B-hF8LuBOTdJ6aYzFuQIfm53hPbhGPduHUZzlcZ7G7Ezx_DSAVeoJIqcKspHK8E7J3pyHuuz8VeOddxpSlsdxktDkXPOae5bH751f5Wdev1SV48jY_t9PU5z8mCYaRlEaY0rz4hM0pVcStcxSnHzMUkSTIkfMPmYposkVlpa5OjlF8IkiBQMAe3NB7Lf7-r3VWdKwAriB50F0AxRhnoLXM2BG9cx1-L565jXoS9YXrGgCXkZpljFGMc6CoeQ0zXmE3WPc8jzpExY9dpi1XRFnXYNtF4gSKTKKmESMxjQLsygtsOmjvMtTllNKYurTFo7jfusmusBPiWVKiyIKxqblo_GDJqLkz_MIOXfBQJfO5qadNq41jsJY8x3FCjvy8iStF1-hRvZX2yPsuX7x-XDJ-iuih2NywA6NPE94MOmxvBhNhR2mNuzUluDaBXP8u9lp9TvvLMH1PAUTXPtX_DsAAP__JB4Mig">