Php 使用正则表达式检测字符串是否存在
我需要使用PHP的Php 使用正则表达式检测字符串是否存在,php,regex,Php,Regex,我需要使用PHP的preg_match()和Regex来检测以下条件: 如果URL路径是以下路径之一: 产品/新项目 新项目/产品 新项目/产品/品牌名称 做点什么 我似乎不知道如何检查a字符串是否存在于单词products之前或之后。我能得到的最接近的结果是: if (preg_match("([a-zA-Z0-9_ ]+)\/products\/([a-zA-Z0-9_ ]+)", $url_path)) { // Do something 有人知道如何检查字符串的第一部分是否存在
preg_match()
和Regex来检测以下条件:
如果URL路径是以下路径之一:
产品/新项目
新项目/产品
新项目/产品/品牌名称
if (preg_match("([a-zA-Z0-9_ ]+)\/products\/([a-zA-Z0-9_ ]+)", $url_path)) {
// Do something
有人知道如何检查字符串的第一部分是否存在于一个正则表达式行中吗?您可以对最后一个项目使用可选组的替换,使
/
成为可选组的一部分
如果只查找匹配项,则可以忽略捕获组
(?:[a-zA-Z0-9_ ]+/products(?:/[a-zA-Z0-9_ ]+)?|products/[a-zA-Z0-9_ ]+)
解释
非catpuring组(?:
匹配字符类中列出的1+倍,[a-zA-Z0-9\]+/products
后跟products/
可以选择匹配(?:/[a-zA-Z0-9_775;]+)?
和字符类中列出的内容/
或|
匹配products/[a-zA-Z0-9\]+
,匹配所列内容的1倍以上products/
关闭组)
请注意,
[a-zA-Z0-9\]+
可能会缩短为[\w]+
,您可以使用替换
([\w ]+)\/products|products\/([\w ]+)
注意:-我不确定您是如何使用匹配值的,如果您不需要对任何特定值进行反向引用,那么您可以避免捕获组,即
[\w ]+\/products|products\/[\w ]+
你在找这样的东西吗?你可以使用alternation
([\w\u]+)\/products\/([\w\u]+)
或@WiktorStribi\380ew,但这将匹配产品
tooThis很奇怪,当我用“产品”以外的词实现它时(根据我的网站要求),它只检测第一个实例,例如@MeltingDog您必须在regex101@MeltingDog的右上角启用全局标志g
,但一定不要在PHP代码中使用任何g
修饰符。