Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式匹配带括号的单词边界字符串_Php_Regex - Fatal编程技术网

Php 正则表达式匹配带括号的单词边界字符串

Php 正则表达式匹配带括号的单词边界字符串,php,regex,Php,Regex,我试图创建一个正则表达式来检查标记是否在文本中,但是有几个标记(数千个,不要问我为什么,SEO专家告诉我的客户这很好)以括号结尾 正则表达式对于普通标记非常有效,但是在圆括号中不能使用plain,因为匹配必须精确,所以我不得不使用单词边界。有没有办法允许这样做 下面是我使用的原始正则表达式: 这就是我尝试过的(是的,我不擅长正则表达式,但我尝试过谷歌搜索,但没有发现任何真正有用的东西): 我还尝试修改单词边界,但它没有正常工作(总是在标记前后匹配字符串的一个字母) 基本上,对于标签文本(ja

我试图创建一个正则表达式来检查标记是否在文本中,但是有几个标记(数千个,不要问我为什么,SEO专家告诉我的客户这很好)以括号结尾

正则表达式对于普通标记非常有效,但是在圆括号中不能使用plain,因为匹配必须精确,所以我不得不使用单词边界。有没有办法允许这样做

下面是我使用的原始正则表达式:

这就是我尝试过的(是的,我不擅长正则表达式,但我尝试过谷歌搜索,但没有发现任何真正有用的东西):

我还尝试修改单词边界,但它没有正常工作(总是在标记前后匹配字符串的一个字母)

基本上,对于标签
文本(jadad)

主要的问题是,对于带括号的标记和不带括号的标记,它必须工作得非常好,理想情况下可以轻松编辑以支持标记中更奇怪的字符([或>或以.或?或结尾的标记!)

我现在真的迷路了。如果你需要任何更多的信息,只需发表评论,我会尝试添加进去


谢谢你的帮助。

我看不到regex101,因为我在用手机,但这可能就是你要找的

 preg_match_all("/(\(.*\))/", $input_lines, $output_array);

编辑:

试试这个

编辑2

编辑3
带文本(jadad)标记:


您可以使用负前瞻
(?!\w)
(表示下一个位置没有单词char)。请注意,您不能使用
\b
,因为
\b
不能在
之后断言)
,这被视为非单词字符:

\btext \(jadad\)(?!\w)

我想这就是你想要的:

\btext \(jadad\)(?!\w)


\b
相当于
(?:后面跟一个单词字符但前面没有一个(单词的开头),或者前面跟一个单词字符但后面没有一个(单词的结尾)。您有一个以非单词字符结尾的“单词”,因此您必须删除
(?\w
包括数字和下划线)(
);如果这不符合您的需要,您可以使用字符类,例如
(?![a-Za-z0-9])
标记是什么?
(jadad)
是针吗?@chris85抱歉,我将它添加到了问题中。它在regex101链接中,但我忘了添加它。所以可能
文本\(jadad)[^a-Za-Z]
?不,不远。标记类似于
文本(另一个文本)
,因此它不只是在括号之间,它必须匹配一个内有括号的文本(嗯,
text(text)text
没有问题,但是
text(text)
是)还需要考虑单词边界。但是,不,我必须精确地指定标签,它不只是任何字符,而是必须与单词边界相匹配的精确文本。这就是为什么我来到这里,因为我不知道如何使这项工作。你的答案应该在这里,而不是在另一个站点。补充链接是好的,但数据应该是。在这里,以防其他网站消失。是的,但是不包含括号(纯文本)的标记将不起作用。看起来这样做很好:)我会再玩一点,主要是明天,当我在工作中处理代码时(就像我在业余时间玩的那样)。如果它起作用(看起来会)我会接受你的回答。我应该多看看消极前瞻和所有那些正则表达式魔法:P谢谢你的帮助。
\(?!\w)
可以写
\)\B
@casimirithippolyte不可以,因为它会忽略空格等。无论如何,这是我所需要的。我会给这个答案+1,但正如anubhava早些时候发布的一样,我不得不接受他的答案,对不起。@MiChAeLoKGB:可以,这是一个确切的同义词。@casimirithippolyte:仅供参考,我最初的答案是
\btext\(jadad\)\B
但我后来将其更改为
\btext\(jadad\)(?!\w)
,因为OP评论说
标记不总是以非单词字符结尾。因此标记可以是
文本(jadad)
text
。@casimirithippolyte正如@anubhava所说,它不一定总是以括号结束。我的问题是:
主要问题是,它必须对带括号和不带括号的标签都能很好地工作,理想情况下,它可以轻松编辑以支持标签中更奇怪的字符([或>或以.或?或结尾的标记!)。
\btext \(jadad\)(?!\w)
\btext \(jadad\)(?!\w)