ref: 89ba7754f4d81234d4fa90eda5df0d62a5daa8a0
parent: a12630e8392a4aa7304a416e1314a5dd974bd16e
author: qwx <qwx@sciops.net>
date: Mon Jan 12 12:47:05 EST 2026
libregexp: treat empty strings as valid regexp assumed behavior in awk (// and !// are valid patterns) and other tools.
--- a/sys/man/6/regexp
+++ b/sys/man/6/regexp
@@ -91,6 +91,8 @@
matches the beginning of a line;
.L $
matches the end of the line.
+An empty regular expression behaves equivalently to
+.LR ^ .
.PP
The
.B REP
--- a/sys/src/libregexp/regcomp.c
+++ b/sys/src/libregexp/regcomp.c
@@ -164,6 +164,10 @@
int regstrlen, maxthr;
regstrlen = utflen(regstr);
+ if(regstrlen == 0){+ regstr = "^";
+ regstrlen = 1;
+ }
initplex(&plex, regstr, lit);
plex.nodes = calloc(sizeof(*plex.nodes), regstrlen*2);
if(plex.nodes == nil)
--- a/sys/src/libregexp/test/basic.rc
+++ b/sys/src/libregexp/test/basic.rc
@@ -42,6 +42,10 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+M '^' 'abracadabracadabra' '(0,0)'
+M '^' '' '(0,0)'
+M '' 'abracadabracadabra' '(0,0)'
+M '' '' '(0,0)'
M 'abracadabra$' 'abracadabracadabra' '(7,18)'
M 'a...b' 'abababbb' '(2,7)'
M 'XXXXXX' '..XXXXXX' '(2,8)'
--
⑨